Lettura di un array con una sola istruzione

La funzione fread permette di leggere un array da file con una sola istruzione. Per leggere un singolo intero si è visto che la istruzione necessaria è:

fread(puntatore a intero, sizeof(int), 1, fd);

Questa funzione in effetti legge una sequenza di dati, e li memorizza in ordine a partire dall'indirizzo passato come primo parametro. Il numero di dati da leggere viene dato come terzo argomento. Dato che fino ad ora abbiamo letto un solo intero, il numero che abbiamo passato alla funzione era 1. Nel caso in cui vogliamo leggere un certo numero di elementi, dobbiamo semplicemente passare questo numero come terzo parametro alla funzione.

Dal momento che un array è una zona di memoria in cui possiamo mettere dati di un certo tipo in modo consecutivo, per leggere n elementi e metterli in un array vett, dobbiamo semplicemente dire alla funzione di leggere n dati (quindi passiamo n come terzo argomento alla funzione), e di metterli nella zona di memoria che comincia dall'indirizzo &vett, e quindi passiamo &vett come indirizzo alla funzione fread.

Qui sotto riportiamo il programma leggiarray.c che legge un array di dieci elementi da file con una sola istruzione. Facciamo notare che il valore di ritorno della funzione fread è in effetti il numero di elementi che la funzione è riuscita a leggere da file. Il programma può essere migliorato aggiungendo un controllo su questo valore di ritorno.

/*
  Legge un array da un file binario
(al massimo dieci elementi)
*/

#include<stdlib.h>
#include<stdio.h>

int main() {
  FILE *fd;
  int vett[10];
  int n;
  int i;
  int res;

			/* apre il file in lettura */
  fd=fopen("test.dat", "r");
  if( fd==NULL ) {
    perror("Errore in apertura del file");
    exit(1);
  }


			/* lettura vettore */
  n=fread(&vett, sizeof(int), 10, fd);


			/* chiude il file */
  fclose(fd);


			/* stampa il vettore */
  for(i=0; i<n; i++)
    printf("vett[%d]=%d\n", i, vett[i]);

  return 0;
}