Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [C] puntatori struttura in un file binario

    Buon giorno, questo codice ci da un 'errore di segmentation fault
    evidentemente il problema è su i puntatori sulla struttura
    come possiamo risolvere tale problema?

    codice:
    #include<stdio.h>
    
    typedef struct {
    	char nome[20];
    	char numero[20];
    } contatto;
    char name[20];
    
    int EsisteFile( char nomeFile[] ) {
    
    	FILE *fp;
    	fp=fopen("lista.dat","rb");
    	if (fp == NULL){
    		return 0;
    	} else {
    		fclose(fp);
    		return 1;
    	}
    }
    
    void Inserimento ( char nomeFile[], char name[20] ){
    
    	FILE *fi, *fe;
    	contatto p, pt;
    	int fine=0;
    	int EsisteFile( char nomeFile[] );
    	if (!EsisteFile( nomeFile)){
    		fi=fopen("lista.dat","wb");
    		fwrite(&pt,sizeof(contatto),1,fi);
    		fclose(fi);
    	} else {
    		fi=fopen("lista.dat","rb");
    		fe=fopen("temporaneo.dat","wb");
    
    		while (fread(&p,sizeof(contatto),1,fi)){
    			if (strcmp(p.nome,name)<0) {
    				fwrite(&p,sizeof(contatto),1,fe);
    			} else {
    				fwrite(&pt,sizeof(contatto),1,fe);
    				break;
    		}
    	}
    	while (!EOF){
    		fread(&p,sizeof(contatto),1,fi);
    		fwrite(&p,sizeof(contatto),1,fe);
    		}
    	}
    	fclose(fi);
    	fclose(fe);
    	remove(nomeFile);
    	rename("temporaneo.dat", nomeFile);
    }
    
    int main () {
    
    	char nomefi[] = "lista.dat";
    	char casa[20];
    
    	EsisteFile (nomefi);
    	printf("Nome?");
    	scanf("%s", casa);
    	Inserimento ( nomefi, casa );
    }

  2. #2
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    dichiari il prototipo " int EsisteFile( char nomeFile[] ); "

    all'interno della funzione "void Inserimento "

    un errore di logica è che le due strutture all'interno della funzione inserimento sono sempre
    vuote non inizializzate , quindi copi e sostituisci la stessa cosa , una struttura identica.
    Tecnologia

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.