char s[100]={0};
fgets(s, sizeof(s), stdin);
В контексте приведенного выше кода, в чем разница между этими тремя?
printf("%s",s);
printf(s);
fputs(s,stdout);
char s[100]={0};
fgets(s, sizeof(s), stdin);
В контексте приведенного выше кода, в чем разница между этими тремя?
printf("%s",s);
printf(s);
fputs(s,stdout);
printf("%s",s);
правильно, но printf — очень тяжелая функция, и большинство компиляторов фактически заменят ее на puts в коде компилятора, если строка формата заканчивается на '\n'
печать(и); очень опасно, так как строка формата может содержать %
и тогда будут ожидаться другие параметры. Если это произойдет, это УБ. Это также делает ваш код уязвимым
fputs(s,stdout); ХОРОШО. Не такой тяжелый, как printf, но добавит новую строку
puts()
добавляет новую строку
- person alx; 04.02.2019
#2 Следует использовать НИКОГДА. Я даже не буду писать это здесь. Злой ввод может сделать очень плохие вещи в вашей системе, вводя специальные символы. Новые версии gcc
предупреждают вас об этой ошибке.
Разница между printf("%s", s);
и puts(s)
заключается в том, что puts
добавит новую строку, как если бы вы вызвали printf("%s\n", s);
s
на переменную, это приведет к ненужной ошибке.
- person alx; 04.02.2019
Как упоминалось в других комментариях и ответах, не пытайтесь использовать второй вариант. Кроме того, третий намного легче первого.
Тем не менее, я все же предпочитаю первый вариант (функция printf()
), потому что он позволяет вам иметь отформатированную строку, что означает, что вы можете распечатать практически любой тип данных с помощью этой функции, тогда как функция fputs
принимает только строки. Поэтому в большинстве случаев вам придется сначала отформатировать строку (возможно, используя sprintf()
), прежде чем передать ее функции!
"bad format %s %*d"
? - person Gerhardh   schedule 04.02.2019printf(s);
будет интерпретироватьs
, и если он содержит знак%
, могут возникнуть непредсказуемые результаты. - person Paul Ogilvie   schedule 04.02.2019fputs(str, stdout)
такое же, какputs(str)
, что проще. - person alx   schedule 04.02.2019