(на это указывает Zan Lynx в комментарии, но я думаю, что это заслуживает ответа - учитывая, что в принятом ответе это не упоминается).
Существенная разница между puts(mystr);
и printf(mystr);
заключается в том, что в последнем случае аргумент интерпретируется как строка форматирования . Результат будет часто одинаковым (за исключением добавленной новой строки), если строка не содержит управляющих символов (%
), но если вы не можете полагаться на это (если mystr
является переменной вместо литерала), вы следует не использовать его.
Таким образом, вообще опасно - и концептуально неправильно - передавать динамическую строку как один аргумент printf
:
char * myMessage;
// ... myMessage gets assigned at runtime, unpredictable content
printf(myMessage); // <--- WRONG! (what if myMessage contains a '%' char?)
puts(myMessage); // ok
printf("%s\n",myMessage); // ok, equivalent to the previous, perhaps less efficient
То же самое относится к fputs
против fprintf
(но fputs
не добавляет символ новой строки).