PDA

View Full Version : [c]fclose e salta tutto!!!


NA01
23-12-2004, 09:27
il codice è quello sotto. così funziona perfettamente , però se provo a mettere fclose(file); insieme agli altri mi si impalla tutto (segmentation-fault)....
non è che qualcuno saprebbe anche dirmi il perchè?
credevo di essere fuori dal limite del file, quini ho proato a usare rewind, ma il problema rimane :( :mc:

perchè? :confused:
grazie, ciao!


#include <stdio.h>

#define SIZE 20

int confronto(char*,char*,int);
int inizializza(FILE* file, char *stringaTemp, int lunghezza);

int main(){
FILE * file, *nuovo, *log;
char stringa2[SIZE],stringaTemp[SIZE], stringa1[SIZE];
int riga = 0, i,lunghezza = 0, occorrenze = 0;
char carattere;

if((nuovo = fopen("modificato.txt","w+")) == NULL){
return 1;
}
if((log = fopen("dati.txt","w+")) == NULL){
return 1;
}
if((file = fopen("testo.txt","r")) == NULL){
return 1;
}

printf("inserici la stringa da cercare\n");
scanf("%20s", stringa1);
printf("inserici la stringa da sostituire\n");
scanf("%20s", stringa2);

//calcola la dimensione della stringa da cercare
for(i = 0; i < SIZE; i++){
if(stringa1[i] != NULL){
lunghezza++;
}else{
break;
}
}

while(inizializza(file,stringaTemp,lunghezza) != -1){
if(confronto(stringa1,stringaTemp,lunghezza)){
fprintf(nuovo,"%s", stringa2);
occorrenze++;
}else{
fprintf(nuovo,"%c", stringaTemp[0]);
}

fseek(file,-(lunghezza-1), SEEK_CUR);
}
}/*fine while*/

fclose(nuovo);
fclose(log);
fclose(file);
return 0;
}


int confronto(char* stringa1,char* stringa2,int len){
int i;
for(i = 0; i < len; i++){
if(stringa1[i] != stringa2[i]){
return 0;
}
}
return 1;
}

int inizializza(FILE* file, char *stringaTemp, int lunghezza){
int i;
//inizializza l'array con i primi caratteri
for(i= 0; i < lunghezza; i++){
if(fscanf(file,"%c",&stringaTemp[i]) != 1){
fclose(file);
return -1;
}
}
}

ilsensine
23-12-2004, 09:54
Originariamente inviato da NA01
il codice è quello sotto. così funziona perfettamente , però se provo a mettere fclose(file); insieme agli altri mi si impalla tutto (segmentation-fault)....
Perché fai un doppio fclose: il primo in "inizializza", il secondo al termine di main.