Когда вы пишете с использованием fwrite, вас интересует только то, что содержимое того места, на которое указывает указатель, записывается на диск. Когда вы читаете из одного и того же файла, вам, как правило, все равно, где в памяти считываются данные.
char* p = malloc(10); // some arbitrary address on the heap
strcpy(p, "hello");
fwrite(p, 1, 6, somefilepointer); // now what p points to is written
когда вы сейчас читаете с использованием фреда, значения помещаются там, где q.
char* q = malloc(10); // some other arbitrary address on the heap
fread(q, 1, 6, somefilepointer);
РЕДАКТИРОВАТЬ : после того, как вопрос был изменен.
Когда вы снова разместите внутри своей структуры, вам нужно будет написать эту часть отдельно, так как она будет существовать в другой частикуча. fwrite записывает только последовательные байты, поэтому запись вашей структуры будет выглядеть примерно так:
fwrite(&BigStruct, sizeof(BigStruct), 1, DataFile);
fwrite(BigStruct.LittleStructArray,
sizeof(BigStruct.LittleStructArray), NumberOfArrayElements, DataFile);
лучше
fwrite(BigStruct.SomeStringData, 1, sizeof(SomeStringData), DataFile);
fwrite(BigStruct.LittleStructArray,
sizeof(BigStruct.LittleStructArray), NumberOfArrayElements, DataFile);