code:
struct MyDataFile {
char* lpszEditor; //String (lp)
UCHAR** lplpucMapTile; //2D Array
UCHAR Floors = 1; //Normal UCHAR
}
Please help me
#4 Members - Reputation: 629
Posted 05 October 1999 - 06:43 AM
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);}
call this function with your data and the length of the data, then when loading it..
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 was
fread(fp, *DataFile.Floors, sizeof(UCHAR)); // not a pointer
Hope that helps.. it might just be confusing.
[This message has been edited by Sphet (edited October 05, 1999).]






