FGETS |
Demande une chaîne dans un fichier |
---|---|
Langage C++ | cstdio (stdio.h) |
Syntaxe
char *fgets(char *str,int n,FILE *ptrfichier); |
Paramètres
Nom | Description |
---|---|
ptrfichier | Ce paramètre permet d'indiquer l'identificateur de fichier |
n | Ce paramètre permet d'indiquer le nombre de caractères maximal pouvant être lu |
str | Ce paramètre permet d'indiquer la chaîne de caractères recevant les données |
Description
Cette fonction effectue la lecture d'une chaîne de caractères dans un fichier.
Remarques
- La fonction fgets() lit jusqu'à n-1 caractères du flux de données et les place dans le tableau de caractères pointé par str. Les caractères sont lus jusqu'à ce qu'une nouvelle ligne ou un EOF soit reçu ou jusqu'à ce que la limite spécifiée soit atteinte. Une fois les caractères lus, un null est placé dans le tableau immédiatement après la lecture du dernier caractère. Un caractère de nouvelle ligne sera conservé et fera partie du tableau pointé par str.
- En cas de succès, la fonction fgets() renvoie str; un pointeur null est retourné en cas d'échec. Si une erreur de lecture se produit, le contenu du tableau pointé par str est indéterminé.
- Étant donné qu'un pointeur null sera retourné lorsqu'une erreur s'est produite ou lorsque la fin du fichier est atteinte, vous devez utiliser feof() ou ferror() pour déterminer ce qui s'est réellement produit.
- Définition et utilité : La fonction fgets permet de lire une ligne entière d'un fichier ou d'un flux d'entrée, contrairement à des fonctions comme fgetc lisant un caractère à la fois. Elle est définie dans la bibliothèque <cstdio> et est particulièrement utilisée pour lire des chaînes de caractères avec un contrôle sur la taille de la lecture, en empêchant les dépassements de mémoire. Elle lit jusqu'à ce qu'une nouvelle ligne soit rencontrée ou jusqu'à ce que le nombre maximum de caractères soit atteint.
- Sécurité et limitation de la taille : L'un des avantages de fgets par rapport à d'autres fonctions comme gets (étant obsolète et non sécurisée) est qu'elle permet de spécifier un nombre maximum de caractères à lire. Cela prévient les débordements de tampon (buffer overflow) en garantissant que seule la taille allouée de la chaîne de caractères est utilisée. Cependant, il est essentiel de ne pas passer un nombre trop petit pour éviter de ne pas lire toute la ligne.
- Gestion des retours à la ligne : Contrairement à certaines autres fonctions de lecture, fgets conserve le caractère de retour à la ligne ('\n') à la fin de la chaîne lue, si ce caractère est rencontré avant la limite de caractères spécifiée. Cela peut parfois être un comportement souhaité, mais si ce caractère n'est pas nécessaire, il peut être supprimé manuellement après la lecture, comme ceci :
- str[strcspn(str, "\n")] = '\0';
- Fin de fichier et erreurs : Si la fin du fichier est atteinte avant que fgets n'ait lu le nombre maximum de caractères spécifié, elle renvoie la chaîne de caractères lue (sans ajouter de caractère de retour à la ligne, si celui-ci n'est pas présent). Si une erreur se produit lors de la lecture, elle renvoie nullptr. Il est donc important de vérifier si le résultat de fgets est nullptr pour détecter une erreur ou la fin du fichier.
- Utilisation dans des boucles : fgets est souvent utilisée dans des boucles pour lire un fichier ligne par ligne. Par exemple, pour lire chaque ligne d'un fichier, vous pouvez utiliser une boucle comme suit :
- Adaptation aux fichiers binaires : Bien que fgets soit principalement utilisée avec des fichiers texte, elle peut être utilisée pour lire des fichiers binaires dans une certaine mesure. Cependant, en raison de la gestion du caractère de fin de ligne, elle n'est pas optimale pour les fichiers binaires où les données peuvent contenir des caractères '\n' dans n'importe quel contexte. Pour les fichiers binaires, il est préférable d'utiliser des fonctions comme fread.
- Compatibilité avec les fichiers et flux standards : fgets peut être utilisée pour lire à la fois depuis des fichiers ouverts explicitement avec fopen, et depuis des flux standards comme stdin (entrée standard). Par exemple, vous pouvez utiliser fgets pour lire une ligne d'entrée de l'utilisateur dans un programme interactif :
Cette approche est efficace et sûre, car elle permet de gérer chaque ligne de manière indépendante et limite la lecture à la taille du tampon spécifié.
Cela permet de capturer des lignes entières d'entrée avec une taille contrôlée, ce qui est particulièrement utile pour les programmes nécessitant une interaction avec l'utilisateur.
Exemple
Prenons pour acquis que le fichier «readtext.txt» est le contenu :
UnDeux
Trois
Quatre
Cinq
Six
Sept
Huit
Neuf
Dix
Onze
Douze
Treize
Quatorze
Quinze
Seize
Voici un exemple montrant une utilisation plus classique de cette fonction :

on obtiendra le résultat suivant :
1:Un2:Deux
3:Trois
4:Quatre
5:Cinq
6:Six
7:Sept
8:Huit
9:Neuf
10:Dix
11:Onze
12:Douze
13:Treize
14:Quatorze
15:Quinze
16:Seize
Voir également
Langage de programmation - C++ - Référence procédures et fonctions - fgetc
Langage de programmation - C++ - Référence procédures et fonctions - fprintf
Langage de programmation - C++ - Référence procédures et fonctions - fputc
Langage de programmation - C++ - Référence procédures et fonctions - fputs
Langage de programmation - C++ - Référence procédures et fonctions - fscanf
Langage de programmation - C++ - Référence procédures et fonctions - getchar
Langage de programmation - C++ - Référence procédures et fonctions - gets
Langage de programmation - C - Référence procédures et fonctions - fgets
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 731.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 99.