Stoqué un fichier dans une chaine C

Fermé
koukoukhaoula Messages postés 50 Date d'inscription mercredi 1 décembre 2010 Statut Membre Dernière intervention 29 juillet 2011 - 12 avril 2011 à 15:44
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 - 12 avril 2011 à 20:39
salut tout le monde,
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:

4 réponses

Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
12 avril 2011 à 15:48
et quelle est la question ?
0
koukoukhaoula Messages postés 50 Date d'inscription mercredi 1 décembre 2010 Statut Membre Dernière intervention 29 juillet 2011
12 avril 2011 à 15:49
j'ai problème lor de l'execution.je c pas comment se procédé
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
12 avril 2011 à 16:29
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.
0
koukoukhaoula Messages postés 50 Date d'inscription mercredi 1 décembre 2010 Statut Membre Dernière intervention 29 juillet 2011
12 avril 2011 à 17:45
c'est un fichier .js
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
12 avril 2011 à 20:39
c'est-à-dire ? un fichier avec du texte ou des lignes de code ? Dans ce cas c'est ok pour le deuxième problème.

mais il faut que tu corriges ton allocation de mémoire.
0