Différence entre fprintf, printf et sprintf?

Quelqu’un peut-il expliquer en anglais simple les différences entre printf , fprintf et sprintf avec des exemples?

Quel stream y a-t-il?

Je suis vraiment confus entre les trois en lisant sur “Manipulation de fichiers en C”.

En C, un “stream” est une abstraction; du sharepoint vue du programme, il s’agit simplement d’un producteur (stream d’entrée) ou d’un consommateur (stream de sortie) d’octets. Il peut correspondre à un fichier sur disque, à un canal, à votre terminal ou à un autre périphérique tel qu’une imprimante ou un tty. Le type FILE contient des informations sur le stream. Normalement, vous ne vous trompez pas directement avec le contenu d’un object FILE , vous passez simplement un pointeur vers les différentes routines d’E / S.

Il existe trois stream standard: stdin est un pointeur sur le stream d’entrée standard, stdout est un pointeur sur le stream de sortie standard et stderr est un pointeur sur le stream de sortie d’erreur standard. Dans une session interactive, les trois font généralement référence à votre console, bien que vous puissiez les redirect vers d’autres fichiers ou périphériques:

 $ myprog < inputfile.dat > output.txt 2> errors.txt 

Dans cet exemple, stdin pointe maintenant sur inputfile.dat , stdout pointe sur output.txt et stderr pointe sur errors.txt .

fprintf écrit le texte formaté dans le stream de sortie que vous spécifiez.

printf équivaut à écrire fprintf(stdout, ...) et écrit du texte mis en forme partout où le stream de sortie standard pointe actuellement.

sprintf écrit du texte mis en forme dans un tableau de caractères, contrairement à un stream.

sorties printf vers le stream de sortie standard ( stdout )

fprintf va dans un fprintf de fichier ( FILE* )

sprintf va dans un tampon que vous avez alloué. ( char* )

printf (“format”, args) est utilisé pour imprimer les données sur la sortie standard qui est souvent un moniteur d’ordinateur.

sprintf (char *, “format”, args) est comme printf. Au lieu d’afficher la chaîne formatée sur la sortie standard, par exemple un moniteur, elle stocke les données formatées dans une chaîne pointée par le pointeur de caractère (le tout premier paramètre). L’emplacement de la chaîne est la seule différence entre la syntaxe printf et sprint.

fprintf (FILE * fp, “format”, args) est comme printf. Au lieu d’afficher les données sur le moniteur ou de les enregistrer dans une chaîne, les données formatées sont enregistrées sur un fichier qui est désigné par le pointeur de fichier utilisé comme premier paramètre de fprintf. Le pointeur de fichier est le seul ajout à la syntaxe de printf.

Si le fichier stdout est utilisé comme premier paramètre dans fprintf, son fonctionnement est alors considéré comme équivalent à celui de printf.

printf(...) est équivalent à fprintf(stdout,...) .

fprintf est utilisé pour sortir en stream.

sprintf(buffer,...) est utilisé pour formater une chaîne dans un tampon.

Notez qu’il existe également vsprintf , vfprintf et vprintf

Vous pouvez aussi faire des choses très utiles avec la fonction vsnprintf ():

 $ cat test.cc #include  #include  #include  struct exception_fmt : std::exception { exception_fmt(char const* fmt, ...) __atsortingbute__ ((format(printf,2,3))); char const* what() const throw() { return msg_; } char msg_[0x800]; }; exception_fmt::exception_fmt(char const* fmt, ...) { va_list ap; va_start(ap, fmt); vsnprintf(msg_, sizeof msg_, fmt, ap); va_end(ap); } int main(int ac, char** av) { throw exception_fmt("%s: bad number of arguments %d", *av, ac); } $ g++ -Wall -o test test.cc $ ./test terminate called after throwing an instance of 'exception_fmt' what(): ./test: bad number of arguments 1 Aborted (core dumped) 

printf

  1. printf est utilisé pour effectuer une sortie sur l’écran.
  2. syntaxe = printf("control ssortingng ", argument );
  3. Il n’est pas associé à l’entrée / sortie de fichier

fprintf

  1. Le fprintf utilisé pour effectuer une opération d’écriture dans le fichier désigné par le descripteur FILE.
  2. La syntaxe est fprintf (filename, "control ssortingng ", argument );
  3. Il est associé à l’entrée / sortie du fichier

fprintf Ceci est lié aux stream où printf est une instruction similaire à fprintf mais non liée aux stream, c’est-à-dire que fprintf est lié au fichier

sprintf: écrit des données formatées dans une chaîne de caractères en mémoire au lieu de stdout

La syntaxe de sprintf est la suivante:

 #include  int sprintf (char *ssortingng, const char *format [,item [,item]…]); 

Ici,

Ssortingng fait référence au pointeur vers un tampon en mémoire où les données doivent être écrites.

Format fait référence au pointeur sur une chaîne de caractères définissant le format.

Chaque élément est une variable ou une expression spécifiant les données à écrire.

La valeur renvoyée par sprintf est supérieure ou égale à zéro si l’opération réussit ou en d’autres termes, le nombre de caractères écrits, sans compter le caractère nul final, est renvoyé et renvoie une valeur inférieure à zéro en cas d’erreur.

printf: imprime à la sortie standard

La syntaxe de printf est la suivante:

 printf format [argument]… 

La seule différence entre sprintf () et printf () est que sprintf () écrit des données dans un tableau de caractères, tandis que printf () écrit des données sur stdout, le périphérique de sortie standard.