puts() vs printf() para imprimir una string

En C, dada una variable de string str , ¿cuál de las dos siguientes debería preferirse para imprimirla en la salida estándar? 

1) puts(str);
2) printf(str);

puts() puede ser preferible para imprimir una string porque generalmente es menos costoso (la implementación de puts() es generalmente más simple que printf()), y si la string tiene caracteres de formato como ‘%s’, entonces printf() daría resultados inesperados. Además, si str es una string de entrada del usuario, entonces el uso de printf() podría causar problemas de seguridad (ver esto para más detalles). 
También tenga en cuenta que puts() mueve el cursor a la siguiente línea. Si no desea que el cursor se mueva a la siguiente línea, puede usar la siguiente variación de puts(). 

fputs(str, stdout)

Puede probar los siguientes programas para probar las diferencias discutidas anteriormente entre puts() y printf().

Programa 1 

C

// C program to show the use of puts
#include <stdio.h>
int main()
{
    puts("Geeksfor");
    puts("Geeks");
 
    getchar();
    return 0;
}

Programa 2 

C

// C program to show the use of fputs and getchar
#include <stdio.h>
int main()
{
    fputs("Geeksfor", stdout);
    fputs("Geeks", stdout);
 
    getchar();
    return 0;
}

Programa 3 

C

// C program to show  the side effect of using
// %s in printf
#include <stdio.h>
int main()
{
    // % is intentionally put here to show side effects of
    // using printf(str)
    printf("Geek%sforGeek%s");
    getchar();
    return 0;
}

Programa 4 

C

// C program to show the use of puts
#include <stdio.h>
int main()
{
    puts("Geek%sforGeek%s");
    getchar();
    return 0;
}

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *