Erreur de segmentation [Résolu]

Signaler
Messages postés
55
Date d'inscription
dimanche 19 septembre 2004
Statut
Membre
Dernière intervention
8 mai 2011
-
Messages postés
55
Date d'inscription
dimanche 19 septembre 2004
Statut
Membre
Dernière intervention
8 mai 2011
-
Bonjour,
voila j'ai un petit soucis bien que j'ai essayé de suivre mes cours à lettre, je ne comprends toujours pas le probleme.
voila en gros la fonction:
char* mafonction()
{
    FILE * fp = fopen("sarah.txt", "r" );
    char c;
    char *text;

    int cursor=0;
    do {    
        c = getc(fp);
            if (c!='\n')
            {
                text[cursor] = c;
                cursor++;
            }

    }while (c!=EOF);
    text[cursor]=EOF;
    fclose(fp);
    return text;
}

et quand j'essai de récupérer le resultat ca me met une erreur de segmentation. cependant, un telle fonction marche:
char* mafonction()

{

    char *text;
   
strcpy(text, "Hello world");

    return text;

}

donc si quelqu'un à une idée sur la facon dont je pourrais lire le fichier pour le stocké dans ma variable text, ca serait sympa

merci

3 réponses

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
40
hum... la tu te limites a lire 1024 chars...

dans cette source :
http://www.cppfrance.com/codes/INTERPRETEUR-BRAINFUCK_47689.aspx

j'ai mis un exemple
# fseek(code, 0, SEEK_END);
# length=ftell(code);
# content=malloc(length);
# if (!content){
# fputs("malloc error\n", stderr);
# return MALLOC_ERROR;
# }
# fseek(code, 0, SEEK_SET);
# c = fread (content,1,length,code);
# fclose(code);
# if (c != length) {
# fputs("Reading error\n", stderr);
# return READING_ERROR;
# }

tu peux lire le contenu complet d'un fichier, quel que soit sa taille, de plus, tu le lis par bloc, donc c'est plus rapide.
Messages postés
55
Date d'inscription
dimanche 19 septembre 2004
Statut
Membre
Dernière intervention
8 mai 2011

en fait c bon il sufisait de faire un malloc dans la fonction cependant j'ai un nouveau probleme du coup:
il ne me lit qu'un seul caractere :(

    FILE * fp = fopen("sarah.dmp", "r" );
    char *c;
    char *text;
    text = (char*)malloc(sizeof(char)*1024);
    strcpy(text, "");
   
    int cursor=0;

    while(!feof(fp)) {
        printf("#");
        fread( c, sizeof(char), 1, fp );
        if (c!="\n")
            text = strncat(text, c, 1);
    }

    fclose(fp);
    return text;
Messages postés
55
Date d'inscription
dimanche 19 septembre 2004
Statut
Membre
Dernière intervention
8 mai 2011

merci beaucoup