Explication détaillée de la fonction fgets C/C++


1. Introduction à la fonction fgets

La fonction fgets lit une ligne du flux spécifié et la stocke dans la chaîne pointée par str. Il s'arrête lorsque (n-1) caractères ont été lus, ou lorsqu'un caractère de nouvelle ligne est lu, ou lorsque la fin du fichier est atteinte, selon le cas.

2. fgets

1. fgets fichier d'en-tête de fonction

#include <stdio.h>

2. fgetsDéclaration de fonction

char *fgets(char *str, int n, FILE *stream);

3. fget les paramètres de la fonction et la valeur de retour

str : Il s'agit d'un pointeur vers un tableau de caractères qui stocke la chaîne à lire.
n : C'est le nombre maximum de caractères à lire (y compris le caractère nul final). Habituellement, la longueur du tableau transmise comme str est utilisée.
stream : Il s'agit d'un pointeur vers un objet FILE qui identifie le flux à partir duquel les caractères doivent être lus.
Valeur de retour : En cas de succès, la fonction renvoie le même paramètre str. Si la fin du fichier est atteinte ou qu'aucun caractère n'est lu, le contenu de str reste inchangé et un pointeur nul est renvoyé. Si une erreur se produit, un pointeur nul est renvoyé.
Lors de la rencontre d'une fin de fichier lors de la lecture de caractères, l'indicateur eof est activé. Si cette situation se produit avant la lecture des caractères, le flux conserve le contenu original et renvoie NULL ; si une erreur de lecture se produit, l'indicateur d'erreur. Le périphérique est set, renvoie NULL et la valeur du flux peut être modifiée.

4. Exemples d'utilisation

#include <stdio.h>
int main(int argc, char *argv[])
{
    
    
    FILE *fp = NULL;
	char buf[64] = {
    
    0};
	fp = fopen("./test.txt", "r");
	if (fp != NULL)
	{
    
    
		while (fgets(buf, sizeof(buf), fp))
		{
    
    
            printf("buf=%s\n", buf);
		}
		fclose(fp);
	}
    return 0;

L'extrait de code ci-dessus lira le fichier test.txt et lira chaque ligne de chaîne via la fonction fgets.

5. Implémentation de la fonction fgets

char *fgets(char *s, int n,  FILE *stream)
{
    
    
   register int c;
   register char *cs;
   cs = s;

   while(--n > 0 && (c = getc(stream)) != EOF)
   {
    
    
      if((*cs++ =   c) == '\n')
      {
    
    
         break;
      }
   }

   *cs = '\0';
   return (c == EOF && cs == s) ? NULL : s ;
}

Il ressort du code source qu'à chaque fois que la fonction fgets est appelée, le paramètre formel 1 se verra attribuer le caractère lu, et finalement attribué à '\0'.

3. Résumé

N'oubliez pas de l'utiliser avec la fonction sscanf pour de meilleurs résultats.

Je suppose que tu aimes

Origine blog.csdn.net/weixin_37926485/article/details/130887323
conseillé
Classement