Strlen+gets

giovedy -  
jisisv Messages postés 3678 Statut Modérateur -
Bonjour,

j'ai une question concernant l'utilisation combinée de fgets et de strlen.
En effet, lorsque l'on récupérait une chaine de caractère avec fscanf, la fonction strlen ne comptais pas le marqueur '\0'.

Mais lorsque l'on récupère une chaine de caractères avec fgets, la
fonction strlen rajoute, en plus de nombre d'espace et du nombre de caractère,un autre caractère.

Pourriez m'expliquer pourquoi ?

Merci

voici mon code

#include <stdio.h> 
#define Max 100 

int main () 
{ 
 FILE *ptfich; 
 char mot[Max], i=0; 
 int somme=0; 
 ptfich=fopen("inf.txt","r"); 
 if(ptfich!=NULL) 
 { 
  while(fgets(mot,50,ptfich), !feof(ptfich)) 
  { 
   somme=somme+ strlen(mot); 
    
   i++; 
  } 
  printf("\n"); 
  printf("le nb de car%d\n", somme); 
  fclose(ptfich); 
 } 
 else 
 { 
  printf("problème fichier\n"); 
 } 
}

1 réponse

jisisv Messages postés 3678 Statut Modérateur 935
 
Extrait de man fgets
fgets()  reads in at most one less than size characters from stream and stores them into the buffer pointed to by s.  Reading stops after an EOF or a newline.  If a newline is read, it is stored into the buffer.  A terminating null byte ('\0') is stored after the last character in the buffer.

1