FUNZIONE DI CARICAMENTO DA FILE BINARIO

di Anonimizzato23428 il
27 risposte

27 Risposte - Pagina 2

  • Nel main

    a) num_giocatori quando lo dichiari e quanto vale ?

    b) array_giocatore quando lo dichiari?

    c) non ha senso passare array_giocatore dato che lo allochi dinamicamente nella funzione

    In realtà questa parte di codice dovrebbe essere ... per il main
    
    int main()
    {
    	Giocatore *array_giocatori;
    	int num_giocatori = 2; // .... o il valore che prendi da tastiera ...
    
    	array_giocatori = acquisisci_giocatori(num_giocatori);
    
    	return 0;
    }
    e l'inizio della funzione
    
    Giocatore *acquisisci_giocatori(int num_giocatori) {
    	int i;
    	Giocatore *array_giocatore;
    	
    per poi continuare con la malloc ...
  • Che differenza farebbe fare quel passaggio nel main e non all'interno della funzione? Scusa la domanda ma non capisco.
    Poi, utilizzando il debugger ho notato che quando vado a comporre una lista, prendendo degli elementi da altre liste, il campo "nome" del nodo, che dopo il carattere '\0' non dovrebbe avere nulla, certe volte presenta altri char, come se sovrascrivesse il nome in un punto dove c'era qualcosa di più lungo già scritto.
    Esempio:
    a1[DIM]= "programmatore"
    a2[DIM]= "lavoro"
    strcpy(a1,a2);
    e la variabile a1 contiene "lavorommatore"

    che problema potrebbe essere?
  • Ho dimenticato di scrivere che:
    num_giocatori prende il valore da una funzione e ho verificato col debugger che sia corretto..
    *array_giocatori è dichiarato e inizializzato a NULL nel main visto che dopo lo alloco dinamicamente.
  • MN9 ha scritto:


    Che differenza farebbe fare quel passaggio nel main e non all'interno della funzione? Scusa la domanda ma non capisco.
    Io non capisco questa tua domanda ... Hai provato con le modifiche che ti ho mostrato?
    che problema potrebbe essere?
    Non è un problema, è normalissimo.

    La parte in più di memoria allocata per la stringa può contenere qualsiasi cosa (può essere anche "sporca" di dati precedenti), la cosa importante è quello che c'è fino al \0

    Va bene array_giocatori nel main ma NON lo devi passare come argomento alla funzione.

    Per il resto, NON HO CAPITO se hai ancora l'errore o no.
  • Quindi pensi che il problema nella funzione di caricamento si risolva con quella modifica?
    Comunque il problema è che devo fare una comparazione tra 2 stringhe, e se le due stringhe fino al carattere di '\0' sono uguali ma dopo il carattere di terminazione di stringa sono diverse, non risulterà mai che si equivalgono, o sbaglio?
    Cioè:
    programma\0
    programma\0ik
    risultano uguali?
  • MN9 ha scritto:


    Quindi pensi che il problema nella funzione di caricamento si risolva con quella modifica?
    Ma il problema non l'avevi nella fwrite?

    Comunque, la funzione che hai mostrato va corretta come ti ho detto.
    Comunque il problema è che devo fare una comparazione tra 2 stringhe, e se le due stringhe fino al carattere di '\0' sono uguali ma dopo...
    La strcmp compara solo fino al \0 e non considera oltre.
  • Nella funzione di salvataggio, anche con il debugger, fila liscio.. si ferma, ma non crusha, nella funzione di caricamento. Quindi nella prima fread del primo ciclo for..
    Perfetto allora non ci sono problemi se mi mette caratteri dopo \0, grazie!
  • Ma quindi ... scusa ... il problema della fwrite qual era ???
  • Nessuno, ho scritto che era nella funzione di caricamento il problema. La funzione di salvataggio l'ho inserita giusto per chiarire che non ci sono errori all'interno. Almeno così sembra dal debugger.
  • Ma scusa ... avevi detto che avevi un crash all'inizio della for subito alla prima fwrite ... o sto sognando??
  • No, nessun crash.. forse mi sono spiegato male, ma nel mio messaggio iniziale, specifico che il problema era nella funzione di caricamento. Forse non l'hai letto perchè non ho utilizzato i tag code e ti è sfuggito. Io sto pensando che il problema sia nel caricamento perchè con il debugger si ferma alla prima fread del primo for.
  • Nella tua prima risposta hai scritto

    Comunque l'errore avviene appena entra nel primo for, la prima riga, ossia questa:
    fwrite(&informazioni.array_giocatori.nome, sizeof(char[DIM_NOME+1]), 1, fp );


    Non l'ho letto? Boh
  • Si, ho scritto male, nel primo messaggio specifico che il problema era nella funzione di caricamento. Credo che la funzione di salvataggio sia giusta (perchè con il debugger non rilevo problemi),poi non so se il problema nella funzione di caricamento derivi dalla funzione di salvataggio.
Devi accedere o registrarti per scrivere nel forum
27 risposte