fread and fread动态分配的char数组,其中包含数字和符号,仅读取4个字节,而不是9个字节

问题描述 投票:0回答:1

假设我在结构中具有这个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; }堆;我分配内存...

c data-structures fwrite fread
1个回答
0
投票

[sizeof(g->boardValues)sizeof(g->playerSymbol)是指针的大小,而不是分配的缓冲区。

© www.soinside.com 2019 - 2024. All rights reserved.