Прежде всего, вы должны сопоставить спецификатор "%" с фактическим типом данных, который вы хотите напечатать. sizeof возвращает тип данных size_t , и точно так же, как вы не должны пытаться печатать с плавающей точкой, используя спецификатор "% d", вы не должны пытаться печатать size_t с помощью " % u "или"% d "или все, что на самом деле не означает size_t.
Другие ответы дали несколько хороших способов справиться с этим с помощью новых компиляторов ("% z" и PRIu32), но способ, которым мы привыкли это делать, - просто привести size_t к unsigned long, а затем распечатать его с помощью " % лу ":
printf("The amount of RAM used is %lu", (unsigned long)(anIntVariable*sizeof(double)) );
Это не будет работать в системах, где size_t шире, чем long, но я не знаю ни одной из таких систем, и я даже не уверен, позволяет ли это стандарт.