Strlen+gets

Fermé
giovedy - Modifié par giovedy le 15/01/2012 à 16:53
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 - 15 janv. 2012 à 18:59
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 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
15 janv. 2012 à 18:59
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