entre diferencia c printf

diferencia entre puts y printf



¿Cuál es la diferencia entre printf() y puts() en C? (10)

(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 de 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) no debe usarlo .

Entonces, generalmente es peligroso -y conceptualmente incorrecto- usar 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 fputs no agrega la nueva línea).

Sé que puedes imprimir con printf() y puts() . También puedo ver que printf() permite interpolar variables y formatear.

Is puts() simplemente una versión primitiva de printf() . ¿Debería usarse para todas las printf() posibles printf() sin interpolación de cadenas?


Además de formatear, puts devuelve un entero no negativo si es exitoso o EOF si no tiene éxito; mientras que printf devuelve la cantidad de caracteres impresos (sin incluir el nulo final).


Al comparar puts() y printf() , aunque el consumo de memoria sea casi el mismo, puts() tarda más tiempo que printf() .


Correcto, printf podría considerarse como una versión más poderosa de puts . printf proporciona la capacidad de formatear variables para salida usando especificadores de formato como %s , %d , %lf , etc ...


En casos simples, el compilador convierte las llamadas a printf() en llamadas a puts() .

Por ejemplo, el siguiente código se compilará con el código de ensamblaje que muestro a continuación.

#include <stdio.h> main() { printf("Hello world!"); return 0; }

push rbp mov rbp,rsp mov edi,str.Helloworld! call dword imp.puts mov eax,0x0 pop rbp ret

En este ejemplo, utilicé la versión 4.7.2 de GCC y compilé la fuente con gcc -o hello hello.c .


En mi experiencia, printf() arrastra más código que puts() independientemente de la cadena de formato.

Si no necesito el formato, no uso printf . Sin embargo, fwrite to stdout funciona mucho más rápido que puts .

static const char my_text[] = "Using fwrite./n"; fwrite(my_text, 1, sizeof(my_text) - sizeof(''/0''), stdout);

Nota: por comentarios, ''/ 0'' es una constante entera. La expresión correcta debe ser sizeof(char) según lo indicado por los comentarios.


la función printf () se usa para imprimir cadenas y variables en la pantalla mientras que la función puts () solo le permite imprimir una cadena solo en su pantalla.


puts es la opción simple y agrega una nueva línea al final y printf escribe la salida de una cadena formateada. Documentación para puts: http://linux.die.net/man/3/puts y para printf: http://linux.die.net/man/3/printf

Yo recomendaría usar solo printf ya que esto es más consistente que el método de conmutación, es decir, si está depurando, es menos doloroso buscar todas las letras printfs que puts e printf. La mayoría de las veces también desea generar una variable en sus impresiones, por lo que puts se usa principalmente en código de ejemplo.


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 quiere, puede fputs su cadena a stdout o usar printf .


int puts(const char *s);

puts () escribe la cadena sy una nueva línea final en stdout.

int printf(const char *format, ...);

La función printf () escribe salida en stdout, bajo el control de una cadena de formato que especifica cómo los argumentos posteriores se convierten para salida.

Aprovecharé esta oportunidad para pedirte que leas la documentación.