(Esto se señala en un comentario de Zan Lynx, pero creo que merece una respuesta, dado que la respuesta aceptada no lo menciona).
La diferencia esencial entre puts(mystr);
y printf(mystr);
es que en este último el argumento se interpreta como una cadena formato.El resultado será a menudo el mismo (excepto la nueva línea añadida) si la cadena no contiene ningún carácter de control (%
) pero si no puede confiar en eso (si mystr
es una variable en lugar de literal) debe no usarlo
Así que, por lo general es peligroso -y mal- conceptualmente utilizar una variable para el primer argumento de printf
:
char * myMessage;
// ... myMessage gets filled at runtime with some unpredictable content
printf(myMessage); // WRONG! (what if myMessage contains a '%' char?)
puts(myMessage); // correct
printf("%s\n",myMessage); // equivalent to the above, perhaps less efficient
Lo mismo se aplica a fputs
vs fprintf
(pero no fputs
añadir el salto de línea).
Solo una nota sobre el uso de printf en lugar de poner: nunca, nunca haga una 'printf (variable)' para imprimir una cadena. Use 'puts (variable)' o 'printf ("% s ', variable) '. Existe un riesgo de seguridad al usar una cadena de formato variable: si la variable puede ser escrita por un atacante, pueden atacar el programa usando cadenas de formato. –
[** puts() vs printf() - C/C++ Answers **] (http://bytes.com/topic/c/answers/527094-puts-vs-printf) –