Оператор sizeof возвращает size_t. На вашей платформе в 32-битных сборках по размеру он равен 32-битному целому (т. Е. Скорее всего это целое число без знака или длинное целое без знака, оба из которых, вероятно, 32-битные для 32-битной сборки) , В 64-битных сборках это длинное целое число без знака, которое 64-битное. % d для целых, а 32-битные как для 32-битных, так и для 64-битных сборок.
Обойти эту дилемму можно следующим образом:
Приведите результат sizeof к четко определенному платформо-независимому типу - unsigned int или, что еще лучше, unsigned long, и затем используйте "% u" или "% lu", соответственно, в качестве символа форматирования printf.
Или вы можете:
Используйте спецификацию форматирования% zu, , которая напрямую поддерживает size_t .