假设我在结构中具有这个boardValues数组
typedef struct Stack
{
char* boardValues;
int size;
char* playerSymbol;
int count;
int turnsCount;
}Stack;
我把这个函数放到一个循环中,数组将数组的值设置为1-9;]
void push( Stack *g, char value ) { char *temp = realloc( g->boardValues, ( g->size + 1 ) * sizeof( int ) ); if ( temp != NULL ) { g->boardValues = temp; g->boardValues[g->size] = value; ++g->size; } }
然后,随着两手棋游戏的进行,boardValues可以说得到了这个值boardValues = ['X','O','O,'X','X','O',6,7,8,9]
我需要将此数据保存为二进制文件,然后从中加载,这是功能:
int saveToBinary(Stack *g) { if (strcmp("continue",name) != 0){ strncat(name,".bin",5); FILE *fp; fp = fopen(name, "wb"); if(fp != NULL){ fwrite(g->boardValues ,1 ,sizeof(g->boardValues) ,fp); fwrite(g->playerSymbol ,1 ,sizeof(g->playerSymbol) ,fp); fwrite(&g->count ,1 ,sizeof(&g->count) ,fp); fwrite(&g->turnsCount ,1 ,sizeof(&g->turnsCount) ,fp); fclose(fp); exit(1); } else { return 2; } } else { return 1; } } int loadFromBinary(Stack *g){ FILE *fp; fp = fopen(saveName, "rb"); if (fp != NULL){ fread(g->boardValues ,sizeof(g->boardValues) ,1, fp); fread(g->playerSymbol ,sizeof(g->playerSymbol) ,1 ,fp); fread(&g->count ,1 ,sizeof(g->count) ,fp); fread(&g->turnsCount ,1 ,sizeof(g->turnsCount) ,fp); fclose(fp); return 1; } else { return 0; } }
问题是,我仅获得前4个字符符号,其他2个变为垃圾字符(我认为),然后从中获取最后一个数字,因此以某种方式消失了一些符号。我试图将fread更改为fread(g-> boardValues,sizeof(char),9,fp);但是其他值,例如turnsCount或count变成垃圾]
假设我在结构typedef结构堆栈中有这个boardValues数组{char * boardValues;整数大小; char * playerSymbol;整数计数int turnCount; }堆;我分配内存...
[sizeof(g->boardValues)
和sizeof(g->playerSymbol)
是指针的大小,而不是分配的缓冲区。