Erreur de segmentation

Résolu
freekid
Messages postés
55
Date d'inscription
dimanche 19 septembre 2004
Statut
Membre
Dernière intervention
8 mai 2011
- 25 août 2008 à 15:54
freekid
Messages postés
55
Date d'inscription
dimanche 19 septembre 2004
Statut
Membre
Dernière intervention
8 mai 2011
- 25 août 2008 à 17:30
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

coucou747
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Membre
Dernière intervention
30 juillet 2012
41
25 août 2008 à 17:12
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.
3
freekid
Messages postés
55
Date d'inscription
dimanche 19 septembre 2004
Statut
Membre
Dernière intervention
8 mai 2011

25 août 2008 à 16:53
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;
0
freekid
Messages postés
55
Date d'inscription
dimanche 19 septembre 2004
Statut
Membre
Dernière intervention
8 mai 2011

25 août 2008 à 17:30
merci beaucoup
0