Taille d'une chaine extraite d'un fichier

Signaler
Messages postés
109
Date d'inscription
samedi 3 novembre 2007
Statut
Membre
Dernière intervention
4 février 2016
-
Messages postés
109
Date d'inscription
samedi 3 novembre 2007
Statut
Membre
Dernière intervention
4 février 2016
-
Bonjour

Je suis en train de lire à partir d'un fichier ligne par ligne en utilisant fgets, mais avec fgets je doit introduire la longueur maximale de la chaine attendu.

par exemple 500:
fgets(answer_buff,500,intermFileRePtr)


Quand je veux récupérer la longueur exacte de la chaine extraite en utilisant strlen() ça m'affiche le 500 que j'ai introduit, apparemment le fgets place le '\0' d'une manière statique.


ce serait agréable si quelqu'un me donne une proposition pour que je puisse récupérer la longueur exacte.

Merci
cordialement

5 réponses

Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
122
Pourtant ça fonctionne bien.
Avec le code suivant, fgets place le 0 terminal correctement:
#include <stdio.h>
#include <string.h>

int main(void)
{
   FILE* pFile;
   char mystring [100];

   pFile = fopen ("myfile.txt", "r"); // "Kikoo" ecrit dans myfile.txt
   if (pFile == NULL)
     perror ("Error opening file");
   else
   {
     fgets(mystring, 100, pFile);
     puts(mystring);// Kikoo
     printf("%i\n", strlen(mystring)); // Affiche bien 6 et pas 100
     fclose (pFile);
   }
   return 0;
}


Tu as du faire une erreur ailleur dans ton code.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
109
Date d'inscription
samedi 3 novembre 2007
Statut
Membre
Dernière intervention
4 février 2016

Merci pour la réponse je v vérifier ,je compile sous Linux, ca fait une différence ?
Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
122
je compile sous Linux, ca fait une différence ?

Normalement, non.
PS: Je compile aussi sous Linux, avec gcc 4.5

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
276
Date d'inscription
lundi 8 septembre 2008
Statut
Membre
Dernière intervention
15 avril 2013
2
Bonjour

fgets arrête la lecture de la chaîne soit lorsqu'il rencontre un \n soit lorsqu'il atteint la longueur maximale, 500 dans ton cas.

Si strlen te renvoie systématiquement 500 c'est parce que les lignes de ton fichier font plus de 500 caractères. Tu dois donc déclarer answer_buff avec une taille suffisante, c'est à dire supérieure à la taille de la plus grande ligne de ton fichier.
Messages postés
109
Date d'inscription
samedi 3 novembre 2007
Statut
Membre
Dernière intervention
4 février 2016

Merci Ed73, desolé pour le retard de ce feedback , mais c'était plutôt parce que la déclaration de mon buffer était supérieure à 500 ;)