Usando FREAD FUNCTION: le dimensioni da leggere sono maggiori di quelli disponibili per la lettura

StackOverflow https://stackoverflow.com//questions/10705158

  •  13-12-2019
  •  | 
  •  

Domanda

Ho una domanda:

Sto usando Frile per leggere un file.

typedef struct {
    int ID1;
    int ID2;
    char string[256];
} Reg;

Reg *A = (Reg*) malloc(sizeof(Reg)*size);

size = FILESIZE/sizeof(Reg);

fread (A, sizeof(Reg), size, FILEREAD);
.

Utilizzando un loop, chiamare consecutivamente questa chiamata, per farmi leggere il mio intero file.

Cosa succederà quando mi avvicinarò alla fine del file e non posso leggere "Dimensione" * Sizeof (Reg), o se sei disponibile solo per leggere la metà di questo importo, cosa succederà con la mia array A.Sarà completato?La funzione restituirà un errore?

Conoscere come il file è stato letto da Flant attraverso?

EDI1: Esattamente, se la divisione non è esatta, quando leggo le dimensioni del file più piccolo più basso che leggo le cose che non sono in archivio, mi chiedo con il mio vettore ridimensionare alla quantità di byte che iopuò leggere o sviluppare una dinamica migliore.

È stato utile?

Soluzione

Fraad restituisce il numero di record che ha letto.Qualunque cosa al di là di ciò nel tuo buffer può essere manglato, non fare affidamento su quei dati.

.

Fread restituisce il numero di elementi completi effettivamente letto, che può essere meno del conteggio se si verifica un errore o se la fine del file è incontrato prima di raggiungere il conteggio.

La funzione non leggerà oltre la fine del file: l'occorrenza più probabile è che riceverai un gruppo di buffer completi e quindi un (finale) tampone parziale letto, a meno che il dimensione del file sia un multiplo esatto del bufferlunghezza.

La tua logica deve adattarsi a questo: la dimensione del file offre il numero totale previsto di record in modo da non essere difficile ignorare i dati di trascinamento nel buffer (dopo la chiamata finale fread) che corrisponde a record non inizializzati.A 'record rimanenti a leggere' il contatore sarebbe un approccio.

Altri suggerimenti

fread() restituisce il numero di elementi che potrebbe essere letto.Quindi devi controllare il valore di ritorno del fread() per scoprire quanti elementi nel tuo array sono validi.

restituirà un breve numero di oggetti o zero se si è verificato un errore o generarecodicitagcode.Dovrai utilizzare EOF feof()TagCode in questo caso per verificare quale condizione è soddisfatta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top