Stoqué un fichier dans une chaine C
koukoukhaoula
Messages postés
50
Date d'inscription
Statut
Membre
Dernière intervention
-
Pacorabanix Messages postés 3248 Date d'inscription Statut Membre Dernière intervention -
Pacorabanix Messages postés 3248 Date d'inscription Statut Membre Dernière intervention -
salut tout le monde,
je souhaite lire un fichier avec C et stoquer son contenu dans une variable de type char*:
je souhaite lire un fichier avec C et stoquer son contenu dans une variable de type char*:
int fonction(char *chemin) { char *res=(char *)malloc((strlen(res)+1) *sizeof(char));/*la chaine danslaquelle je stoque le contenu du fichier*/ char *ch=(char *)malloc((strlen(ch)+1) *sizeof(char)); ch[0]='\0'; char *ChercheUs=" MaCondition"; FILE *fic; char ligne_lue[512]; char *recherche1; fic = fopen(chemin, "r"); // ouvrir en lecture while(fgets(ligne_lue, 512, fic) != NULL) { recherche1=strstr(ligne_lue,"var"); if(!recherche1) { res=strcat(ch,ligne_lue); res=strcat(res,"\n"); } else { res=strcat(ChercheUs,res); } } printf("%s",res); return 1; }
A voir également:
- Stoqué un fichier dans une chaine C
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
4 réponses
ok, déjà au début, lors de tes allocations mémoire il y a un problème :
char *res=(char *)malloc((strlen(res)+1)
le problème, c'est que res vient d'être crée, il a donc une longueur indéterminée, il ne faut pas appeler strlen dessus.
il te allouer la mémoire pour une chaine une fois que tu connais sa taille.
il y a plusieurs problèmes :
1) tu ne connais pas la taille de ton fichier au début. tu dois donc allouer assez de place pour mettre ce que tu lis (par tranche de 512 apparemment), puis utiliser ralloc pour réallouer de l'espace supplémentaire si tu n'as pas fini
2)es-tu sûr que dans ton fichier il n'y a pas de caractère nul ('\0') ?
car si oui tu seras incapable de lire la totalité de ton fichier dans ta chaine.
char *res=(char *)malloc((strlen(res)+1)
le problème, c'est que res vient d'être crée, il a donc une longueur indéterminée, il ne faut pas appeler strlen dessus.
il te allouer la mémoire pour une chaine une fois que tu connais sa taille.
il y a plusieurs problèmes :
1) tu ne connais pas la taille de ton fichier au début. tu dois donc allouer assez de place pour mettre ce que tu lis (par tranche de 512 apparemment), puis utiliser ralloc pour réallouer de l'espace supplémentaire si tu n'as pas fini
2)es-tu sûr que dans ton fichier il n'y a pas de caractère nul ('\0') ?
car si oui tu seras incapable de lire la totalité de ton fichier dans ta chaine.