2011-04-17 7 views
29

Quelle est exactement la différence entre les deux?Quand devrais-je utiliser fputs à la place de fprintf?

+15

ne pas être un crétin, mais avez-vous vérifié la documentation du [deux] (http: //pubs.opengroup .org/onlinepubs/009695399/functions/printf.html) [functions] (http://pubs.opengroup.org/onlinepubs/009695399/functions/fputs.html)? Une sortie formatée, l'autre génère une chaîne, non formatée, dans le flux. avez-vous une question spécifique? –

+1

Que dit votre manuel de référence C? –

+1

'fputs (s, f)' est fonctionnellement équivalent à 'fprintf (f,"% s ", s)'. Ils compilent tous les deux au même code (un appel à 'fputs') avec des compilateurs d'optimisation modernes. – chqrlie

Répondre

30

fprintf fait une sortie formatée. C'est-à-dire, il lit et interprète une chaîne de format que vous fournissez et écrit dans le flux de sortie les résultats .

fputs écrit simplement la chaîne que vous fournissez au flux de sortie indiqué.

fputs() n'a pas besoin d'analyser la chaîne d'entrée pour comprendre que tout ce que vous voulez faire est d'imprimer une chaîne. fprintf() vous permet de formater au moment de la sortie.

+0

Je peux me tromper, mais fputs est plus sûr si vous voulez imprimer une chaîne contrôlée par l'utilisateur. Il y a beaucoup de posts sur StackOverflow à ce sujet. – Greg0ry

4

Uhm ... ... puts() écrit juste une chaîne, tandis que printf() a un certain nombre d'installations de mise en forme pour plusieurs types de données.

fputs() http://www.cplusplus.com/reference/clibrary/cstdio/fputs/

fprintf() http://www.cplusplus.com/reference/clibrary/cstdio/fprintf/

La documentation est utile! Apprenez à le lire, et vous aurez un outil puissant de votre côté.

+8

'puts' /' printf' n'est pas une corrélation exacte avec 'fputs' /' fprintf'. 'puts' ajoute un' '\ n'' à sa sortie, contrairement à toutes les autres fonctions. –

11

Comme cela a été souligné par d'autres commentateurs (et comme il ressort des docs), la grande différence est que printf permet le formatage des arguments.

Vous demandez peut-être si les fonctions sont équivalentes si aucun argument supplémentaire n'est passé à printf()? Eh bien, ils ne le sont pas.

char * str; 
    FILE * stream; 
    ... 
    fputs(str,stream); // this is NOT the same as the following line 
    fprintf(stream,str); // this is probably wrong 

Le second est probablement faux, parce que l'argument de chaîne à fprintf() est toujours une chaîne de formattage: si elle a un caractère « % », il sera interprété comme un prescripteur de formatage.

La forme fonctionnelle équivalente (mais moins directe/efficace/Nice) serait

fprintf(stream,"%s", str); 
Questions connexes