Everythin' is explained there.
Bye!
Not many can claim 25 years on the Internet! Join us in celebrating this milestone. Learn more about our history, and thank you for being a part of our community!
So, please, be a little bit more precise.
Thanks.
typedef struct
{
char string1[1024];
char string2[255];
int posX;
int posY;
} GameData;
If you do a sizeof(GameData), you'll get a value that represents the contents of the data, and a fwrite(fp, pGameData, sizeof(GameData), will work.
In your sample:
struct MyDataFile {
char* lpszEditor; //String (lp)
UCHAR** lplpucMapTile; //2D Array
UCHAR Floors = 1; //Normal UCHAR
}
this will not work, since you are storing strings as pointers with no length.
When you have data stored in a pointer, a sizeof(pointerVariable) will return the size of the pointer, not its contents. So if you have malloc'd 2MBs to a pointer, the pointer will still return 4 if you do a sizeof(pointerVar). If you need to do it this way, you will have to store your data in a different method, most likely using something like this:
For each member of your structure, you will have to save it seperately, and load it seperately, in sequence, as in the following:
SaveBlock(char *data, unsigned long int length){ // first same a number as to how long // the data is fwrite(fp, length, sizeof(length)); // now save the block fwrite(fp, data, length);}
fp = fopen(filename, "wb");SaveBlock(DataFile.lpszEditor, strlen(DataFile.lpszEditor));SaveBlock(DataFile.lplpucMapTile, mapSize);fwrite(fp, DataFile.Floors, sizeof(UCHAR)); // not a pointer
Then to load:
LoadData(char **data, int *length){ // find out how long the data chunk is fread(fp, *length, sizeof(*length)); // allocate the memory *data = malloc(*length); // read the data fread(fp, *data, *length);}fp = fopen(filename, "rb");unsigned int loadLength;LoadData(*DataFile.lpszEditor, *loadLength);DataFile.lpszEditor[loadLength] = '\0'; // terminate the stringLoadData(*DataFile.lplpucMapTile, *loadLength);mapSize = *loadLength; // save this so you know how bit the mapsize wasfread(fp, *DataFile.Floors, sizeof(UCHAR)); // not a pointer
[This message has been edited by Sphet (edited October 05, 1999).]
code:struct MyDataFile { char* lpszEditor; //String (lp) UCHAR** lplpucMapTile; //2D Array UCHAR Floors = 1; //Normal UCHAR}