Salve, ho alcuni dubbi riguardanti la scrittura/lettura di un file binario in C++.
Faccio riferimento al libro di testo Herbert Schildt, "C++ The Complete Reference, 4th Edition", dove le funzioni fwrite e fread sono così definite:
size_t fread(void *buffer, size_t num_bytes, size_t count, FILE *fp);
size_t fwrite(const void *buffer, size_t num_bytes, size_t count, FILE *fp);
I miei dubbi sono i seguenti:
1) Perché in fwrite il puntatore *buffer è di tipo const void e non semplicemente void?
2) Supponiamo che io voglia scrivere su un file binario un vettore intero:
(uso Dev-C++ 4.9.9.2, non so se sia utile specificarlo)
codice:
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
int main()
{
int V[] = {1,2,3,4,5};
FILE *fp;
fp = fopen("myfile.bin", "wb");
if(fp == NULL)
{
cout<<"\nImpossibile aprire il file \n";
return 1;
}
fwrite(V, sizeof V, 1, fp);
fclose (fp);
return 0;
}
L'espressione fwrite(V, sizeof V, 1, fp); dice che sto scrivendo, su myfile.bin, 1 blocco di dati da sizeof V bytes, cioè, un blocco da 20 bytes.
Intuitivamente, io sarei portato a credere che trasferire un vettore int V[5] voglia dire trasferire 5 blocchi di dati da 4 bytes ciascuno, ma in tutti gli esempi che sono riuscito a trovare, il terzo argomento di fwrite/fread è sempre 1.
E' errata la mia interpretazione? Cosa determina il numero di blocchi da trasferire? Qual è il massimo numero di bytes da poter trasferire "con un solo blocco"?
Il mio dubbio vale sia per fwrite che per fread.
Grazie anticipatamente.