передача строки в printf не работает должным образом:
char p[50];
scanf("%s", p);
printf(p, 10);
ввод: value:%d\n
ожидаемый результат: value:10
вывод: value:10\n
Кроме того, я получил разные результаты в разное время. вывод одного и того же a.out при 3 последовательных выполнениях:
$./a.out
value: %d\n
value:
$./a.out
value:%d\n\n
value:10\n\n
$./a.out
value:%d\n
value:10\n
В приведенном выше value: %d\n
соответствует scanf, а следующая строка — printf.
value
? - person unwind   schedule 27.02.2013printf
- person John Dvorak   schedule 27.02.2013printf
? - person John Dvorak   schedule 27.02.2013%n
может записывать в произвольную память. Даже без него злоумышленник может раскрыть произвольные данные в стеке (например, пароль) или вызвать сбой вашей программы. - person nneonneo   schedule 27.02.2013printf(s, ...)
, где строка форматаs
— это строка, предоставленная пользователем, т. е. переданная непосредственно вprintf
. Это противоречит жестко закодированной литеральной строке, что является нормой. - person nneonneo   schedule 27.02.2013