Buonasera,
i valori
float a;
double b;
char c1, c2, c3;
short int d;
char c4;
long int e;
disposti in tale ordine occupano in memoria uno spazio pari a 24 byte, poiché c'è un byte di padding dopo c3 e uno dopo c4.. giusto?
Però, facendo un programma che legga e stampi a schermo questi valori scritti in un file binario, il mio ragionamento non torna.. In particolare b=0.000000 per ogni valore inserito, inoltre ho notato che, utilizzando fseek per spostare il puntatore, vengono stampati sbagliati anche d, c4, e, cosa che non accade, ad eccezione di e, non utilizzandolo.
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *fp;
fp = fopen("es17.dat", "r");
float a;
double b;
char c1, c2, c3;
short int d;
char c4;
long int e;
fread(&a, sizeof(float), 1, fp);
printf("a: %f\n", a);
fread(&b, sizeof(double), 1, fp);
printf("b: %f\n", b);
fread(&c1, sizeof(char), 1, fp);
printf("c1: %c\n", c1);
fread(&c2, sizeof(char), 1, fp);
printf("c2: %c\n", c2);
fread(&c3, sizeof(char), 1, fp);
printf("c3: %c\n", c3);
fseek(fp, 2, 1); //sposto il puntatore di 2 byte dalla posizione corrente(va alla casella 17)
fread(&d, sizeof(short int), 1, fp);
printf("d: %hd\n", d);
fread(&c4, sizeof(char), 1, fp);
printf("c4: %c\n", c4);
fseek(fp, 2, 1); //casella 21
fread(&e, sizeof(long int), 1, fp);
printf("e: %ld\n", e);
fclose(fp);
return 0;
}