Si la lecture se fait sans erreur et sans rencontre de la fin de fichier,
fgetc rend le caractère lu.
Si il y a erreur d'entrée-sortie, ou rencontre de fin de fichier, fgetc
rend la valeur EOF.
Pour cette raison, le type de la valeur rendue est int et non pas
char.
Il existe une fonction getc qui est rigoureusement identique à
fgetc (même interface, même sémantique), sauf que getc est
implémenté comme une macro et non comme une vraie fonction C.
La différence est que getc peut évaluer plusieurs fois son paramètre
flot-de-données, ce qui lui interdit d'être une expression
contenant des effets de bord.
Exemple :
int i;
FILE * TAB_FILE[10];
c = getc(TAB_FILE[i++]); /* Arrgh..., effet de bord ! */
La fonction getchar est rigoureusement équivalente à getc(stdin).
C'est également une macro, mais comme elle n'admet pas de paramètre,
elle n'a pas le (petit) inconvénient de getc.
#include <stdio.h>
int c;
FILE *fi,*fo;
/* fi : résultat de fopen de fichier en lecture */
/* fo : résultat de fopen de fichier en écriture */
while ((c = fgetc(fi)) != EOF)
fputc(c,fo);
Il existe une fonction putc qui est rigoureusement identique à
fputc (même interface, même sémantique), sauf que putc est
implémenté comme une macro et non comme une vraie fonction C.
La même remarque que celle faite au sujet de getc s'applique donc à
putc.