我一直在寻找很多,但无法找到问题的答案。
我在C上构建自己的列表库。我的想法是使用所有可能的数据类型,以便我使用void指针。
首先,这是我的名单。
文件 - node.h
struct Node{
void *data;
Node *next;
};
我已经创建了一些随机结构来测试我的方法,例如添加,删除,写入等等,并且工作正常。
文件 - test.cpp
struct telfList{
int telf;
char name;
};
struct calendar{
char month[5];
};
这是我将结构写入文件的地方。
bool saveToFile(struct Node *list, char *fileName){
FILE *file = fopen(fileName, "wb");
if(file == NULL){
return false;
}
struct Node *aux = list;
while(aux != NULL){
fwrite(&(aux->data), 1, sizeof(aux->data), file);
aux = aux->next;
}
fclose(file);
return true;
}
我的问题来了。 我想再次读取该文件并将信息存储回列表,它必须处理每种类型的结构,因为在此测试中有telfList和日历,但未来可能是敌人,玩家或其他什么。 我不知道如何通过param将数据类型传递给函数,或者如何通过void指针传递fread。
我知道这个功能是错的,我现在已经知道了,我证明了我所知道的,我在这里读了100个问题,而且没有人有这个疑问/问题
在这个例子中,我试图读取文件并用数据填充telfList的结构。
bool loadFromFile(struct Node **list, void* data, char *fileName){
FILE *file = fopen(fileName, "rb");
struct Node *aux = *list;
if(file == NULL){
return false;
}
data = fread(fileName, sizeof(*data), 1, file);
createNewList(list, data);
fclose(file);
return true;
}
这是我创建列表的方式。
void createNewList(struct Node **list, void* data){
(*list) = createNode(data);
}
struct Node* createNode(void* data){
struct Node *newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
我试图详细解释它,但如果需要更多的代码部分只是说我。 谢谢。
编辑:感谢大家的回答,我一直在研究序列化,你的提示非常有帮助。答案 0 :(得分:0)
将序列化结构化为二进制(或任何其他形式)是单独库的单独任务。不要将它与列表库混合。
对于序列化,我建议使用像protobuf-c
这样的第三方库。即使您不能在项目中使用它,也要检查它以了解数据序列化的基本概念。