Solución:
puts
es más simple que printf
pero tenga en cuenta que el primero agrega automáticamente una nueva línea. Si eso no es lo que quieres, puedes fputs
su cadena a stdout o usar printf
.
(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 un cadena de formato. El resultado será a menudo el mismo (excepto por la nueva línea agregada) 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 un literal) debe no úselo.
Entonces, es generalmente peligroso y conceptualmente incorrecto– para pasar una cadena dinámica como único argumento de printf
:
char * myMessage;
// ... myMessage gets assigned at runtime, unpredictable content
printf(myMessage); // <--- WRONG! (what if myMessage contains a '%' char?)
puts(myMessage); // ok
printf("%sn",myMessage); // ok, equivalent to the previous, perhaps less efficient
Lo mismo se aplica a fputs
vs fprintf
(pero fputs
no agrega la nueva línea).
Además de formatear, puts
devuelve un entero no negativo si tiene éxito o EOF
si no tiene éxito; tiempo printf
devuelve el número de caracteres impresos (sin incluir el nulo final).