Namespaces
Variants

fgets

Depuis fr.cppreference.net
< c | io
 
 
Entrée/sortie de fichier
Types et objets
        
Fonctions
Accès aux fichiers
(C95)
Entrée/sortie non formatée
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)

Entrée formatée
Entrée/sortie directe
Sortie formatée
Positionnement dans le fichier
Gestion des erreurs
Opérations sur les fichiers
 
Défini dans l'en-tête <stdio.h>
char* fgets( char* str, int count, FILE* stream );
(jusqu'à C99)
char* fgets( char* restrict str, int count, FILE* restrict stream );
(depuis C99)

Lit au maximum count - 1 caractères depuis le flux de fichier donné et les stocke dans le tableau de caractères pointé par str. L'analyse s'arrête si un caractère de nouvelle ligne est trouvé (auquel cas str contiendra ce caractère de nouvelle ligne) ou si la fin du fichier est atteinte. Si des octets sont lus et qu'aucune erreur ne se produit, écrit un caractère nul à la position immédiatement après le dernier caractère écrit dans str.

Paramètres

str - pointeur vers un élément d'un tableau de char
count - nombre maximal de caractères à écrire (généralement la longueur de str)
stream - flux de fichier à partir duquel lire les données

Valeur de retour

str en cas de succès, pointeur nul en cas d'échec.

Si la condition de fin de fichier est rencontrée, définit l'indicateur eof sur stream (voir feof()). Ce n'est un échec que si cela ne provoque la lecture d'aucun octet, auquel cas un pointeur nul est retourné et le contenu du tableau pointé par str n'est pas modifié (c'est-à-dire que le premier octet n'est pas écrasé par un caractère nul).

Si l'échec a été provoqué par une autre erreur, définit l'indicateur error (voir ferror()) sur stream. Le contenu du tableau pointé par str est indéterminé (il peut même ne pas être terminé par un caractère nul).

Notes

POSIX exige en outre que fgets définisse errno si une erreur de lecture se produit.

Bien que la spécification standard soit peu claire dans les cas où count <= 1, les implémentations courantes font

  • si count < 1, ne rien faire, signaler une erreur,
  • si count == 1,
  • certaines implémentations ne font rien, signalent une erreur,
  • d'autres ne lisent rien, stockent zéro dans str[0], signalent un succès.

Exemple

#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    FILE* tmpf = tmpfile();
    fputs("Alan Turing\n", tmpf);
    fputs("John von Neumann\n", tmpf);
    fputs("Alonzo Church\n", tmpf);
 
    rewind(tmpf);
    
    char buf[8];
    while (fgets(buf, sizeof buf, tmpf) != NULL)
          printf("\"%s\"\n", buf);

    if (feof(tmpf))
       puts("End of file reached");
}

Sortie :

"Alan Tu"
"ring
"
"John vo"
"n Neuma"
"nn
"
"Alonzo "
"Church
"
End of file reached

Références

  • Norme C23 (ISO/IEC 9899:2024) :
  • 7.21.7.2 La fonction fgets (p : TBD)
  • Norme C17 (ISO/IEC 9899:2018) :
  • 7.21.7.2 La fonction fgets (p : 241)
  • Norme C11 (ISO/IEC 9899:2011) :
  • 7.21.7.2 La fonction fgets (p : 331)
  • Norme C99 (ISO/IEC 9899:1999) :
  • 7.19.7.2 La fonction fgets (p : 296)
  • Norme C89/C90 (ISO/IEC 9899:1990) :
  • 4.9.7.2 La fonction fgets

Voir aussi

lit l'entrée formatée depuis stdin, un flux de fichier ou un tampon
(fonction)
(supprimé dans C11)(C11)
lit une chaîne de caractères depuis stdin
(fonction)
écrit une chaîne de caractères dans un flux de fichier
(fonction)
(TR mémoire dynamique)
lit depuis un flux dans un tampon automatiquement redimensionné jusqu'à un délimiteur/fin de ligne
(fonction)