RISOLTO Errori su scrittura e lettura di una struct su file

Stato
Discussione chiusa ad ulteriori risposte.

Vito-

Utente Attivo
184
14
Ciao, ho un esercizio che mi chiede di definire una struttura, scriverla in un file e poi leggerla dal file.
E la prima volta che uso i file e le procedure quindi penso ci saranno tantissime cose sbagliate.
Sul programma mi dice che ci sono degli errori che pero non so risolvere...
Come potrei sistemarlo?


C:
#include <stdio.h>

void putStruct(struct struttura a, FILE *pf);
void printStruct(struct struttura a, FILE *pf);

int main()
{
    typedef struct  {char nome[20];
                     char cognome[20];
                     char codFiscale[20];
                     int anni;
                     int sesso;
                    }studenti;
    struct studenti stud1;
    FILE *pf;

    printf("Inserire il nome: ");
    scanf("%s",stud1.nome);
    printf("Inserire il cognome: ");
    scanf("%s", stud1.cognome);
    printf("Inserire il codice fiscale: ");
    scanf("%s", stud1.codFiscale);
    printf("Inserire l'eta: ");
    scanf("%d", &stud1.anni);
    printf("Inserire il sesso: ");
    scanf("%d", &stud1.sesso);

    pf=fopen("Archivio.txt", "w");
    if(pf)
    {
        putStruct(struct struttura a, FILE *pf);
        fclose(pf);
    }
    else
    {
        printf("Errore.");
    }

    pf=fopen("Archivio.txt", "r");
    if(pf)
    {
        printStruct(struct struttura a, FILE *pf);
        printf("%s", stud1.nome);
        printf("%s", stud1.cognome);
        printf("%s", stud1.codFiscale);
        printf("%d", stud1.anni);
        printf("%d", stud1.sesso);
        fclose(pf);
    }
    else
    {
        printf("Errore.");
    }

    return(0);
}


void putStruct(struct struttura a, FILE *pf)
{
    fwrite(&stud1,sizeof(struct),size (stud1), pf);
}

void printStruct(struct struttura a, FILE *pf)
{
    fread(&stud1,sizeof(struct),size (stud1), pf);
}
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Gli errori sono tanti...
Ma una domanda: segui la documentazione o utilizzi un ambiente che ti indica quando sbagli qualcosa? Perchè gli errori di compilazione li risolvi tutti seguendo la documentazione e consultandola quando ci sono problemi o dubbi; ogni linguaggio ha una sintassi e le funzioni hanno determinati parametri così come le parole chiave hanno un significato. Non puoi usarle "a caso" o andare a tentativi.
Se utilizzi un IDE i 3/4 (forse tutti) degli errori che ci sono qui sopra li risolvi anche prima di compilare, perchè ti riporta tutti i problemi.
Fermo restando che è fondamentale capire gli errori che vengono restituiti dal compilatore.

Ti dico queste cose perchè gli esercizi che affronti ora sono ancora semplici, ma quando andrai a scrivere molto più codice ed utilizzare altro (tipo i puntatori), allora sarà fondamentale riuscire a destreggiarsi con questi strumenti che sono la base (e con un debugger). ?
Poi: ricorda sempre di riportare qui l'errore o gli errori che ottieni.

Bene, a parte questo lungo preambolo, ti aiuto a mettere ordine.

1)
Quando utilizzi typedef stai definendo un alias a un tipo di dato. Non ti serve utilizzare ancora "struct" quando crei "stud1".

2)
Poi:

C:
    if(pf)
    {
        putStruct(struct struttura a, FILE *pf);
        fclose(pf);
    }

struttura, cos'è? Non esiste. Tu hai creato stud1 sopra.
La struttura la dovresti spostare al di fuori della funzione, devi crearla prima del main (e prima della dichiarazione delle funzioni).

Ti mostro una versione ancora sbagliata, però con meno errori:
C:
#include <stdio.h>

    typedef struct  {char nome[20];
                     char cognome[20];
                     char codFiscale[20];
                     int anni;
                     int sesso;
                    }studenti;
 

void putStruct(studenti stud1, FILE *pf);
void printStruct(studenti stud1, FILE *pf);

int main()
{
  studenti stud1;
    FILE *pf;

    printf("Inserire il nome: ");
    scanf("%s",stud1.nome);
    printf("Inserire il cognome: ");
    scanf("%s", stud1.cognome);
    printf("Inserire il codice fiscale: ");
    scanf("%s", stud1.codFiscale);
    printf("Inserire l'eta: ");
    scanf("%d", &stud1.anni);
    printf("Inserire il sesso: ");
    scanf("%d", &stud1.sesso);

    pf=fopen("Archivio.txt", "w");
    if(pf)
    {
        putStruct(stud1, FILE *pf);
        fclose(pf);
    }
    else
    {
        printf("Errore.");
    }

    pf=fopen("Archivio.txt", "r");
    if(pf)
    {
        printStruct(stud1, FILE *pf);
        printf("%s", stud1.nome);
        printf("%s", stud1.cognome);
        printf("%s", stud1.codFiscale);
        printf("%d", stud1.anni);
        printf("%d", stud1.sesso);
        fclose(pf);
    }
    else
    {
        printf("Errore.");
    }

    return(0);
}


void putStruct(studenti stud1, FILE *pf)
{
    fwrite(&stud1,sizeof(struct),size (stud1), pf);
}

void printStruct(studenti stud1, FILE *pf)
{
    fread(&stud1,sizeof(struct),size (stud1), pf);
}

3)
Questo è un altro errore:
C:
putStruct(stud1, FILE *pf);

tu hai già dichiarato e definito pf, perchè utilizzare ancora il tipo (FILE)?

Ho il timore non ti siano chiari aspetti più alla base comunque, visto il tipo di errori; non penso siano tutti frutto di distrazione (sono molti).
Ad esempio, ti è chiaro come avviene il passaggio di un dato a una funzione? Ti è chiaro cosa significa dichiarare una variabile?
E lo scope di una variabile?

Se su queste cose hai dubbi è meglio che cerchi di dipanarli, tramite libri/documentazioni e tramite il nostro aiuto (ma sta a te porci le domande ?).

4)
Altro errore è qui:
C:
  fread(&stud1,sizeof(struct),size (stud1), pf);

come dicevo sopra, size non esiste, non è una funzione. Il terzo parametro di fread è il numero di membri, che nel tuo caso, quanti sono? Uno solo. Il sizeof deve essere fatto su stud1, non su "struct".

5)
Volendo, un altro errore ancora, è il sesso: di solito è un char (M/F) non un numero. Dovresti modificare il tipo di dato della struttura e quello che leggi.

6)
Infine, le tue funzioni dovrebbero ricevere un puntatore allo studente; quindi dovresti modificarle in:
C:
void putStruct(studenti*, FILE *pf);

Apportate tutte queste correzioni, funzionerà (non te lo faccio io per evitarti il copia/incolla); se hai domande/dubbi, siamo qui. Non penso di essermi perso altro di "importante" a prima vista.
 

Vito-

Utente Attivo
184
14
Ho sistemato cosi ma ancora non va.
Mi dice:
Codice:
||=== Build file: "no target" in "no project" (compiler: unknown) ===|
C:\Users\vitox\Desktop\immissione ed emissione da un file.c|10|error: expected declaration specifiers or '...' before '*' token|
C:\Users\vitox\Desktop\immissione ed emissione da un file.c|11|error: expected declaration specifiers or '...' before '*' token|
C:\Users\vitox\Desktop\immissione ed emissione da un file.c||In function 'main':|
C:\Users\vitox\Desktop\immissione ed emissione da un file.c|32|warning: implicit declaration of function 'putStruct' [-Wimplicit-function-declaration]|
C:\Users\vitox\Desktop\immissione ed emissione da un file.c|32|error: expected expression before 'studenti'|
C:\Users\vitox\Desktop\immissione ed emissione da un file.c|43|warning: implicit declaration of function 'printStruct' [-Wimplicit-function-declaration]|
C:\Users\vitox\Desktop\immissione ed emissione da un file.c|43|error: expected expression before 'studenti'|
C:\Users\vitox\Desktop\immissione ed emissione da un file.c|60|error: expected declaration specifiers or '...' before '*' token|
C:\Users\vitox\Desktop\immissione ed emissione da un file.c|65|error: expected declaration specifiers or '...' before '*' token|

Detto questo non voglio piangermi addosso o dare colpe ad altri pero tra il prof straniero che capisco poco e niente e tra la materia che é nuova sto avendo non poche difficolta, anche a capire dal libro che alcune volte é poco chiaro.
Per quanto riguarda le funzioni tra le tonde non vanno messe variabili generali? Nel senso, nel main ci sono 'a' e 'b' e nella funzione metti 'x' e 'y', il prof fa cosi...

C:
#include <stdio.h>

typedef struct  {char nome[20];
                 char cognome[20];
                 char codFiscale[20];
                 int anni;
                 char sesso;
                }studenti;

void putStruct(studenti* stud1, *pf);
void printStruct(studenti* stud, *pf);

int main()
{
    studenti stud1;
    FILE *pf;

    printf("Inserire il nome: ");
    scanf("%s",stud1.nome);
    printf("Inserire il cognome: ");
    scanf("%s", stud1.cognome);
    printf("Inserire il codice fiscale: ");
    scanf("%s", stud1.codFiscale);
    printf("Inserire l'eta: ");
    scanf("%d", &stud1.anni);
    printf("Inserire il sesso: ");
    scanf("%c", &stud1.sesso);

    pf=fopen("Archivio.txt", "w");
    if(pf)
    {
        putStruct(studenti*, *pf);
        fclose(pf);
    }
    else
    {
        printf("Errore.");
    }

    pf=fopen("Archivio.txt", "r");
    if(pf)
    {
        printStruct(studenti*, *pf);
        printf("%s", stud1.nome);
        printf("%s", stud1.cognome);
        printf("%s", stud1.codFiscale);
        printf("%d", stud1.anni);
        printf("%d", stud1.sesso);
        fclose(pf);
    }
    else
    {
        printf("Errore.");
    }

    return(0);
}


void putStruct(studenti* stud1, *pf)
{
    fwrite(&stud1,sizeof(stud1),1, pf);
}

void printStruct(studenti* stud1, *pf)
{
    fread(&stud1,sizeof(stud1),1, pf);
}
 

Andretti60

Utente Èlite
6,440
5,091
Aperta parentesi.

Per favore non dare la colpa agli insegnanti, ovvio ci siano insegnanti buoni o cattivi, ma quando si fanno sbagli non si fa mai buoni figura dando la colpa agli altri. Come pure ai libri di testo, pensa a tutti quelli che hanno studiato prima di te sugli stessi libri e non hanno avuto problemi. E ti parlo da uno che è stato da ambo le parti della cattedra. Se dici “non capisco” va bene, altrimenti sembrano solo scuse.

Chiusa parentesi.
 
  • Mi piace
Reazioni: BrutPitt

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Si, l'errore è nella correzione che hai apportato.

Detto questo non voglio piangermi addosso o dare colpe ad altri pero tra il prof straniero che capisco poco e niente e tra la materia che é nuova sto avendo non poche difficolta, anche a capire dal libro che alcune volte é poco chiaro.
Non fatico a crederci. E' normale avere difficoltà quando ti avvicini a qualcosa di nuovo.
Tuttavia, anche se il prof non fosse bravo a spiegare o si spiegasse male, la dichiarazione di una funzione o cose di questo livello le trovi anche online, oltre che sui libri di testo.
Ho preso questo come esempio perchè l'errore che hai introdotto è:

C:
void printStruct(studenti* stud1, *pf)

che tipo ha quel "pf"? Cos'è? Non hai usato il tipo, FILE.

I libri raramente riportano anche gli output dei compilatori, se non nelle prime fasi; sta a te cercare di capire l'errore che hai commesso (oltretutto riportano sempre la riga anche).

Per quanto riguarda le funzioni tra le tonde non vanno messe variabili generali? Nel senso, nel main ci sono 'a' e 'b' e nella funzione metti 'x' e 'y', il prof fa cosi...
Non ho capito cosa intendi con "variabili generali" nelle funzioni.
Ti faccio un esempio:

C:
int somma(int a, int b) {
    return a+b;
}

questa funzione riceve due parametri di tipo int e restituisce un altro int, che è la somma.
C:
int main() {
    int a = 10
    int b = 20;

    printf("%d", somma(a, b));

    return 0;
}

quando avviene la chiamata alla funzione somma, vengono passati i valori delle variabili 'a' e 'b'.



Tornando quindi ai tuoi errori:

C:
putStruct(studenti*, *pf);

cosa significa questo?
Se cerchi sul tuo libro sicuramente troverai come si passano correttamente i parametri ad una funzione; nel caso di specie, hai "stud1" che deve essere passato come parametro alla tua funzione. Quello che devi fare tu è prendere l'indirizzo di stud1 e passarlo alla funzione che chiami:

C:
putStruct(&stud1, pf);

pf è già un puntatore a FILE, quindi lo passi così com'è.
La firma corretta delle funzioni è in entrambi i casi questa:

C:
void putStruct(studenti* stud1, FILE *pf)

in questo caso stud1 è una variabile che punta a un tipo di dato chiamato studenti (che è l'alias creato prima della tua struct).
In poche parole, il puntatore ti permette di memorizzare un indirizzo di memoria.

Devi modificare anche la printf per stampare il carattere (il sesso) e non più l'intero.

Se apporti queste correzioni funzionerà. Ti consiglio però di tornare sui puntatori, sono importanti, e li vedrai praticamente sempre.
 
  • Mi piace
Reazioni: Andretti60

Vito-

Utente Attivo
184
14
Aperta parentesi.

Per favore non dare la colpa agli insegnanti, ovvio ci siano insegnanti buoni o cattivi, ma quando si fanno sbagli non si fa mai buoni figura dando la colpa agli altri. Come pure ai libri di testo, pensa a tutti quelli che hanno studiato prima di te sugli stessi libri e non hanno avuto problemi. E ti parlo da uno che è stato da ambo le parti della cattedra. Se dici “non capisco” va bene, altrimenti sembrano solo scuse.

Chiusa parentesi.
No ma infatti non sto dando la colpa a nessuno io, ho solo detto come stanno le cose, vi mancherebbe. Magari sarò io che ho problemi

Inviato da Redmi 5 Plus tramite App ufficiale di Tom\'s Hardware Italia Forum
 

Andretti60

Utente Èlite
6,440
5,091
Diciamo che i tuoi non sono “problemi” bensì “carenze” in quanto come ti ha detto @DispatchCode come passare dati a una funzione è una delle prime cose che si impara quando si studia un linguaggio di programmazione, nel caso di C va subito dopo lo studio dei puntatori.
Comunque visto che sei all’uni, una cosa che devi capire è che i libri di testo servono solo come guida. Non si studia un argomento su un testo solo. Io mi laureai quando internet non esisteva, passavamo i nostri pomeriggi in biblioteca per studiare (perché comprare dozzine di libri non ha senso, specie i manuali di riferimento). Adesso non si hanno più scuse visto la massiccia quantità di documentazione che si può trovare su internet.
Non vedere questi miei commenti come una critica, già il fatto che tu chieda in un forum dimostra che sei interessato a studiare.
 

Vito-

Utente Attivo
184
14
Diciamo che i tuoi non sono “problemi” bensì “carenze” in quanto come ti ha detto @DispatchCode come passare dati a una funzione è una delle prime cose che si impara quando si studia un linguaggio di programmazione, nel caso di C va subito dopo lo studio dei puntatori.
Comunque visto che sei all’uni, una cosa che devi capire è che i libri di testo servono solo come guida. Non si studia un argomento su un testo solo. Io mi laureai quando internet non esisteva, passavamo i nostri pomeriggi in biblioteca per studiare (perché comprare dozzine di libri non ha senso, specie i manuali di riferimento). Adesso non si hanno più scuse visto la massiccia quantità di documentazione che si può trovare su internet.
Non vedere questi miei commenti come una critica, già il fatto che tu chieda in un forum dimostra che sei interessato a studiare.
no ci mancherebbe, anzi grazie per l'aiuto che mi state dando
Post unito automaticamente:

Ok sistemato cosi va, c'é solo una cosa. Quando metto nome, cognome, codFIscale e eta tutto ok. Quando premo invidio dopo l'eta per mettere il sesso invece di farmi inserire un valore mi stampa tutto quello che ho scritto prima...
Poi quando mi crea il file sul desktop non scrive le cose che digito io, ma 3 caratteri "Dya".


Codice:
#include <stdio.h>

typedef struct  {char nome[20];
                 char cognome[20];
                 char codFiscale[20];
                 int anni;
                 char sesso;
                }studenti;

void putStruct(studenti* stud1, FILE *pf);
void printStruct(studenti* stud, FILE *pf);

int main()
{
    studenti stud1;
    FILE *pf;

    printf("Inserire il nome: ");
    scanf("%s",stud1.nome);
    printf("Inserire il cognome: ");
    scanf("%s", stud1.cognome);
    printf("Inserire il codice fiscale: ");
    scanf("%s", stud1.codFiscale);
    printf("Inserire l'eta: ");
    scanf("%d", &stud1.anni);
    printf("Inserire il sesso: ");
    scanf("%c", &stud1.sesso);

    pf=fopen("Archivio.txt", "w");
    if(pf)
    {
        putStruct(&stud1, pf);
        fclose(pf);
    }
    else
    {
        printf("Errore.");
    }

    pf=fopen("Archivio.txt", "r");
    if(pf)
    {
        printStruct(&stud1, pf);
        printf("%s", stud1.nome);
        printf("%s", stud1.cognome);
        printf("%s", stud1.codFiscale);
        printf("%d", stud1.anni);
        printf("%c", stud1.sesso);
        fclose(pf);
    }
    else
    {
        printf("Errore.");
    }

    return(0);
}


void putStruct(studenti* stud1, FILE *pf)
{
    fwrite(&stud1,sizeof(stud1),1, pf);
}

void printStruct(studenti* stud1, FILE *pf)
{
    fread(&stud1,sizeof(stud1),1, pf);
}
 
Ultima modifica:

Vito-

Utente Attivo
184
14
Non ho capito cosa intendi con "variabili generali" nelle funzioni.
Ti faccio un esempio:

C:
int somma(int a, int b) {
    return a+b;
}

questa funzione riceve due parametri di tipo int e restituisce un altro int, che è la somma.
C:
int main() {
    int a = 10
    int b = 20;

    printf("%d", somma(a, b));

    return 0;
}

quando avviene la chiamata alla funzione somma, vengono passati i valori delle variabili 'a' e 'b'.


Con variabili generali intendo delle variabili di nome diverso, ovvero nella funzione metti lo stesso tipo pero il nome delle variabili diverso.
 

Andretti60

Utente Èlite
6,440
5,091
Penso che il problema sia che in entrambi putStruct e printStruct (che in effetti è una getStruct) passi il puntatore della struttura (che va bene) ma quando vai a scriverla/leggerla usi il suo indirizzo. Stud1 è già un puntatore, non c’è bisogno che uso il &
 
  • Mi piace
Reazioni: DispatchCode

Vito-

Utente Attivo
184
14
Penso che il problema sia che in entrambi putStruct e printStruct (che in effetti è una getStruct) passi il puntatore della struttura (che va bene) ma quando vai a scriverla/leggerla usi il suo indirizzo. Stud1 è già un puntatore, non c’è bisogno che uso il &
Mi da questo se tolgo la &

Codice:
C:\Users\vitox\Desktop\immissione ed emissione da un file.c|32|error: incompatible type for argument 1 of 'putStruct'|
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Ok sistemato cosi va, c'é solo una cosa. Quando metto nome, cognome, codFIscale e eta tutto ok. Quando premo invidio dopo l'eta per mettere il sesso invece di farmi inserire un valore mi stampa tutto quello che ho scritto prima...
E' sempre dovuto a quanto detto nell'altro topic; è causato dal new line. Cambia lo scanf in scanf(" %c"); e vedrai che funziona.

Poi quando mi crea il file sul desktop non scrive le cose che digito io, ma 3 caratteri "Dya".

Questo dovrebbe essere corretto (a me compila e funziona):
C:
#include <stdio.h>

    typedef struct  {char nome[20];
                     char cognome[20];
                     char codFiscale[20];
                     int anni;
                     char sesso;
                    }studenti;
  

void putStruct(studenti*, FILE *pf);
void printStruct(studenti*, FILE *pf);

int main()
{
  studenti stud1;
    FILE *pf;

    printf("Inserire il nome: ");
    scanf("%s",stud1.nome);
    printf("Inserire il cognome: ");
    scanf("%s", stud1.cognome);
    printf("Inserire il codice fiscale: ");
    scanf("%s", stud1.codFiscale);
    printf("Inserire l'eta: ");
    scanf("%d", &stud1.anni);
    printf("Inserire il sesso: ");
    scanf(" %c", &stud1.sesso);

    pf=fopen("Archivio.txt", "w");
    if(pf)
    {
        putStruct(&stud1, pf);
        fclose(pf);
    }
    else
    {
        printf("Errore.");
    }

    pf=fopen("Archivio.txt", "r");
    if(pf)
    {
        printStruct(&stud1, pf);
        printf("%s\n", stud1.nome);
        printf("%s\n", stud1.cognome);
        printf("%s\n", stud1.codFiscale);
        printf("%d\n", stud1.anni);
        printf("%c\n", stud1.sesso);
        fclose(pf);
    }
    else
    {
        printf("Errore.");
    }

    return(0);
}

void putStruct(studenti *stud1, FILE *pf)
{
    fwrite(stud1,sizeof(stud1),1, pf);
}

void printStruct(studenti *stud1, FILE *pf)
{
    fread(stud1,sizeof(stud1),1, pf);
}

Mi da questo se tolgo la &

Codice:
C:\Users\vitox\Desktop\immissione ed emissione da un file.c|32|error: incompatible type for argument 1 of 'putStruct'|

Che compilatore utilizzi? E quale versione?

Comunque non ti aspettare di aprire Archivio.txt con un editor di testo e vedere il contenuto "in chiaro".
 
  • Mi piace
Reazioni: Vito-

BrutPitt

Utente Attivo
1,166
1,262
Penso che il problema sia che in entrambi putStruct e printStruct (che in effetti è una getStruct) passi il puntatore della struttura (che va bene) ma quando vai a scriverla/leggerla usi il suo indirizzo. Stud1 è già un puntatore, non c’è bisogno che uso il &
@vito

@DispatchCode ... credo che abbia elimintato le & nella chiamata a putStruct e printStruct, non in fread/fwrite
 
  • Mi piace
Reazioni: Vito-

Vito-

Utente Attivo
184
14
Penso che il problema sia che in entrambi putStruct e printStruct (che in effetti è una getStruct) passi il puntatore della struttura (che va bene) ma quando vai a scriverla/leggerla usi il suo indirizzo. Stud1 è già un puntatore, non c’è bisogno che uso il &
Ok se intendevi negli fwrite e fread se tolgo le & mi da lo stesso risultato di prima
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,223
1,854
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
  • Mi piace
Reazioni: Vito-
Stato
Discussione chiusa ad ulteriori risposte.

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili