gpt4 book ai didi

c - 如何从文件中读取/写入包含 4 个指针的 C 结构到相同类型的结构?

转载 作者:行者123 更新时间:2023-11-30 17:36:30 25 4
gpt4 key购买 nike

我有以下结构,我正在尝试将其写入文件或从文件中读取它。

struct block{
int id;
int row, col;
int alive;

struct block *next_up, *next_dn, *next_lt, *next_rt;
};

我有以下读取和写入函数,但它们返回错误的地址,可能是指针的地址,而不是指向的地址。指针将是 NULL或者包含 struct block 的内存地址。

保存:

void save_blocks(){
FILE *my_stream;
my_stream = fopen ("blocks.txt", "w");

int c;
for(c=0;c<blk_cnt;c++){

fprintf(my_stream, "%d ", the_blocks[c].id);
fprintf(my_stream, "%d ", the_blocks[c].row);
fprintf(my_stream, "%d ", the_blocks[c].col);
fprintf(my_stream, "%d ", the_blocks[c].alive);

fprintf(my_stream, "%p ", the_blocks[c].next_up);
fprintf(my_stream, "%p ", the_blocks[c].next_dn);
fprintf(my_stream, "%p ", the_blocks[c].next_lt);
fprintf(my_stream, "%p ", the_blocks[c].next_rt);

}
fflush (my_stream);
fclose (my_stream);
}

这是负载:

void load_blocks(){
blk_cnt = 0;

int id, row, col, alive;
struct block *next_up, *next_dn, *next_lt, *next_rt;

FILE *my_stream;
my_stream = fopen("blocks.txt", "r");

while(!feof(my_stream)){
int blk_cnt = fscanf(my_stream, "%d %d %d %d %p %p %p %p",
&col, &alive, &next_up, &next_dn, &next_lt, &next_rt);

the_blocks[blk_cnt].id = id;
the_blocks[blk_cnt].row = row;
the_blocks[blk_cnt].col = col;
the_blocks[blk_cnt].alive = alive;

the_blocks[blk_cnt].next_up = next_up;
the_blocks[blk_cnt].next_dn = next_dn;
the_blocks[blk_cnt].next_lt = next_lt;
the_blocks[blk_cnt].next_rt = next_rt;
blk_cnt++;
}
}

我尝试使用 fwrite 和 fread,但它给出了错误的指针地址。我觉得我需要写&(*next_up)但这似乎是错误的。我搜索过this question类似,但不完全是我需要的。最后,我真的需要 while(!feof())环形? TIA。

最佳答案

不要保存指针,而是给每个 block 一个唯一的标识符(这就是id)并保存它。然后,在加载完整数组后,循环遍历每个元素并将唯一 id 替换为相应 block 的地址。

关于c - 如何从文件中读取/写入包含 4 个指针的 C 结构到相同类型的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22657254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com