Ho questo codice e la seconda fscanf (quella nell'acquisizione delle spese) mi da segmentation fault. Perchè? Mi sembra sia molto simile alla prima, perchè la prima non mi da problemi?
Grazie.codice:#include <stdio.h> #include <stdlib.h> #include <string.h> #define N 50 //nel file clienti.txt c'è, in ogni riga, nome cognome città nomefile //ogni cliente ha associato un file spese con: causale prezzo typedef struct spese { char *causale; float prezzo; struct spese *next; }SPESE; typedef struct clienti{ char* nome; char* cognome; char* citta; char*nomefile; SPESE* spesa; struct clienti *next; }CLIENTI; int main() { FILE *fp=NULL; FILE *fp2=NULL; fp=fopen("clienti.txt","r"); if (fp==NULL)return -1; char buff[N],buff1[N],buff2[N],buff3[N],buff4[N]; float prezzo=0; CLIENTI *p=NULL; CLIENTI *testa=NULL; SPESE *p_spesa=NULL; //acquisizione clienti while(fscanf(fp,"%s %s %s %s",buff, buff1, buff2, buff3)!=EOF){ printf("%s %s %s %s\n",buff, buff1, buff2, buff3); p=(CLIENTI*)malloc(sizeof(CLIENTI)); p->nome=(char*)malloc((strlen(buff)+1)*sizeof(char)); strcpy(p->nome, buff); p->cognome=(char*)malloc((strlen(buff1)+1)*sizeof(char)); strcpy(p->cognome, buff1); p->citta=(char*)malloc((strlen(buff2)+1)*sizeof(char)); strcpy(p->citta, buff2); p->nomefile=(char*)malloc((strlen(buff3)+1)*sizeof(char)); strcpy(p->nomefile, buff3); p->next=testa; testa=p; } fclose(fp); //acquisizione spese p=testa; while(p!=NULL){ fp2=(p->nomefile,"r"); if(fp2==NULL)return -3; while(fscanf(fp2,"%s %f",buff4, &prezzo)!=EOF){ //questa è la fscanf che da SEGMENTATION FAULT p_spesa=(SPESE*)malloc(sizeof(SPESE)); p_spesa->causale=(char*)malloc((strlen(buff4)+1)*sizeof(char)); strcpy(p_spesa->causale,buff4); p_spesa->prezzo=prezzo; p_spesa->next=p->spesa; p->spesa=p_spesa; } fclose(fp2); p=p->next; }

Rispondi quotando