La consegna dell'esercizio è questa:
È stato definito un formato binario di dati per memorizzare numeri interi a 32 bit, che consiste in un numero intero a 32 bit che indica quanti numeri sono presenti nel file, seguito da altrettanti numeri interi a 32 bit. Tutti i numeri sono in little endian.
Ad esempio un file contenente i valori 7, 8 e 9 verrebbe codificato con i seguenti byte (rappresentati in esadecimale nel seguito):
03 00 00 00 07 00 00 00 08 00 00 00 09 00 00 00
La funzione leggininteri() riceve in input il nome di un file come stringa C e deve: aprire il file in lettura in modalità non tradotta (binaria), leggere il primo intero (chiamiamolo n), allocare dinamicamente memoria per n interi, leggere gli n interi, impostare size al valore di n, e ritornare un puntatore alla memoria allocata. Se l’apertura fallisce o se non è possibile leggere tutti gli n interi, ritornare NULL. Ricordarsi comunque di chiudere il file se l’apertura è andata a buon fine.
Io ho scritto queste righe di codice:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int *leggiinteri(const char *filename, size_t *size) {
FILE *f = fopen(filename, "rb");
if (f == NULL)
return NULL;
if ( fread(size, sizeof(int), 1, f) != 1 )
return NULL;
int *numbers = calloc(*size, sizeof(int));
for (size_t i = 0; i < *size; i++) {
fread(&numbers[i], sizeof(int), 1, f);
}
fclose(f);
return numbers;
}
int main(void) {
size_t size = 0;
int *n = leggiinteri("prova.bin", &size);
return 0;
}
Per quanto riguarda le righe di codice mi sento abbastanza sicuro.. però ho una domanda.. siccome non ho mai lavorato con i file sono un po' inesperto. Ho creato un file prova.bin e al suo interno ci ho scritto come nell'esempio della consegna 7 8 9. Non capisco perchè quando va a leggere il file, il programma non funziona.. qualcuno ha capito il mio problema? secondo voi ho sbagliato a scrivere all'interno del file.bin qualcosa?