PDA

Visualizza la versione completa : [C] Segmentation Fault


Sevenarth
06-10-2010, 18:32
Ciao a tutti! Non sono un esperto in C e da poco che lo so. Sto avendo sempre un problema con Segmentation Fault ogni volta che concateno delle stringhe..
Avvio il codice normalmente e all'avvio si blocca con Segmentation Fault..

Questo è il codice:

char INIReader_ViewFile()
{
char contenuto[80];
char *linea;
FILE *stream, *fopen();
stream = fopen("config.ini", "r");
while(fgets(linea, 500, stream) != NULL)
{
strcat(contenuto, linea);
}
printf(contenuto);
return contenuto;
}

Aiutatemi.. Son due giorni che mi sbatto :bhò:

Alex'87
06-10-2010, 18:58
Alloca la memoria per la variabile linea.

Sevenarth
06-10-2010, 19:04
Grazie mille. Avevo provato così :| boh..

Ehm..però non capisco perchè facendo passare attraverso il return il valore mi da quell'errore :S
Avrò sbagliato nel file header? Io ho messo così:


char INIReader_ViewFile(void);

e poi nel main(); ho fatto

#include "INIRead.h"

int main(){
printf(INIReader_ViewFile());
}
cosa ho sbagliato?

simo_85
06-10-2010, 22:00
Come la usi printf ?

Alex'87
06-10-2010, 22:24
Originariamente inviato da Sevenarth
Grazie mille. Avevo provato così :| boh..

Ehm..però non capisco perchè facendo passare attraverso il return il valore mi da quell'errore :S
Avrò sbagliato nel file header? Io ho messo così:


char INIReader_ViewFile(void);

e poi nel main(); ho fatto

#include "INIRead.h"

int main(){
printf(INIReader_ViewFile());
}
cosa ho sbagliato?

1. Dichiari la funzione INIReader_ViewFile con valore di ritorno char e poi restituisci un array di char
2. printf NON si usa così

Sevenarth
06-10-2010, 22:27
lol
eh.. non so come farla restituire di valore array char...pensavo che così andava bene :|

simo_85
06-10-2010, 22:57
Originariamente inviato da Sevenarth
lol
eh.. non so come farla restituire di valore array char...pensavo che così andava bene :|
Cosa vuoi fare esattamente?? Copiare il contenuto di un file in un array (stando a vedere il tuo codice) ?
Applica le dovute modifiche..

Sevenarth
07-10-2010, 13:55
praticamente al main.c io ho messo #include "INIReader.h", e volevo fare in modo di poter eseguire le funzioni di INIReader.c, ma se faccio restituire il valore della funzione ViewFile in INIReader.c in un char in main.c mi esce Segmentation Fault, avrò sbagliato l'header?
Io nel l'header a quella funzione ho fatto così:

char INIReader_ViewFile(void);

LeaderGL
09-10-2010, 21:09
ma anche una cosa di questo tipo ti da errore:


void INIReader_ViewFile()
{
char contenuto[2000];
char linea[500];
FILE *stream;
stream = fopen("config.ini", "r");
while(fgets(linea, 500, stream) != NULL)
{
strcat(contenuto, linea);
}
printf("%s", contenuto);
}


per ritornare il contenuto letto devi usare i puntatori...inoltre tu ritornavi un "char" ma contenuto è un vettore di "char" (non un sol carattere).

ps. perchè nel codice tieni "FILE *fopen()" ?!? non ha senso...

simo_85
10-10-2010, 08:59
:
Originariamente inviato da simo_85
Cosa vuoi fare esattamente?? Copiare il contenuto di un file in un array (stando a vedere il tuo codice) ?
:facepalm:
Scusate..

Loading