Это не так, printf
это. Вы говорите printf
, что вы передаете ему две строки ("%s"
), тогда как на самом деле вы передаете int
и float
. Должно быть:
printf("%d %f", i, f);
В противном случае он будет обрабатывать два аргумента в стеке как строки (т. Е. char*
).
Поскольку два char*
не были переданы, как было обещано, при попытке вывести значения того, что он считает двумя строками в стеке, это приведет к неопределенному поведению и, возможно, к аварийному завершению. Скорее всего, это потому, что указатели, которые он пытается разыменовать, являются недействительными и фактически не указывают на действительный адрес.
printf
не может сказать, верны ли передаваемые вами аргументы, однако предупреждения вашего компилятора будут. Включите предупреждения вашего компилятора.
Прочтите здесь, чтобы узнать больше о параметрах предупреждения с помощью gcc (если вы это используете): http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
Подробнее о спецификаторах формата читайте здесь (т. Е. %s
, %d
): http://www.cplusplus.com/reference/clibrary/cstdio/printf/