gpt4 book ai didi

C - 从文件加载链接列表

转载 作者:行者123 更新时间:2023-11-30 14:55:05 24 4
gpt4 key购买 nike

所以我使用二进制文件来保存有关某些节点状态的信息(系统内部的东西)。重点是这个二进制文件只是很多 1 和 0,其想法是读取该文件并将其加载到一个结构中。这是结构体的定义:

typedef struct t_bitmap{
int estado;
struct t_bitmap* siguiente;
}t_bitmap;

这是应该加载它的代码:

t_bitmap leerBitmap(char* unPath){
t_bitmap bitmap;
FILE *fp = fopen (unPath, "rb");
int i=0;
fseek(fp, 0, SEEK_END);
int tamanio = sizeof(char) * ftell(fp);
fseek(fp, 0, SEEK_SET);
char* bytes = malloc(tamanio);
fread(bytes, tamanio, 1, fp);
fclose (fp);
while(i<tamanio){
bitmap.estado = bytes[i];
bitmap = bitmap.siguiente; //This fails
i++;
};
free(bytes);
return bitmap;
};
<小时/>

编辑1

错误是:从类型“struct t_bitmap *”分配给类型“t_bitmap”时出现不兼容的类型

最佳答案

您需要为读入的每个字节分配一个新节点。

通常,人们会定义该函数,使其返回一个指向链表头部的指针(如果无法读入任何值,则该指针可能为NULL)。

为了不改变函数的原型(prototype),我保留了列表头部的“按值返回”隐喻。

因此该函数为每个字节分配一个新节点,除了第一个字节,它直接存储在将按值返回的“头”中:

t_bitmap leerBitmap(char* unPath){
t_bitmap bitmap;
FILE *fp = fopen (unPath, "rb");
int i=0;
fseek(fp, 0, SEEK_END);
int tamanio = sizeof(char) * ftell(fp);
fseek(fp, 0, SEEK_SET);
char* bytes = malloc(tamanio);
fread(bytes, tamanio, 1, fp);
fclose (fp);

t_bitmap* curBitMap = &bitmap; // the current bitmap to write to
while(i<tamanio){
if (i > 0) { // except for the first, create a new node
curBitMap->siguiente = malloc(sizeof(t_bitmap));
curBitMap = curBitMap->siguiente;
}
curBitMap->estado = bytes[i];
curBitMap->siguiente = NULL;
i++;
};
free(bytes);
return bitmap;
}

关于C - 从文件加载链接列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46259199/

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