gpt4 book ai didi

c - 具有多个数据字段的通用列表 C

转载 作者:行者123 更新时间:2023-11-30 16:55:56 26 4
gpt4 key购买 nike

我正在尝试用 C 创建一个具有多个数据字段的通用链表

typedef struct listNode {
void *data1;
void *data2;
void *data3;
struct listNode *next;
} listNode;

我需要从以下格式的文件中读取

name YOB  country 
john 1995 USA
Sam 1990 USA
Tim 1889 AUS

所以我的计划是让列表的每个节点存储每行的信息(我已经找到了每列是什么类型的变量,这样我就可以键入强制转换指针)。例如第 2 行

typedef struct listNode {
void *data1; //becomes a string that is john
void *data2; //becomes a int that is 1995
void *data3; // becomes a string that is USA
struct listNode *next;
} listNode;

我的问题首先是,甚至可能或列表的每个元素只能保存一种变量,就像我搜索通用列表时一样,示例只有一个空数据*

我的第二个问题是我不知道文件有多少列;有没有办法动态设置数据字段的数量?

//FILE HAS 5 COLUMNS
typedef struct listNode {
void *data1;
void *data2;
void *data3;
void *data4;
void *data5;
struct listNode *next;
} listNode;

//FILE HAS 2 COLUMNS
typedef struct listNode {
void *data1;
void *data2;
struct listNode *next;
} listNode;

最佳答案

我不太明白你的第一个问题。也许还有更多解释?

对于第二个,您需要动态分配一些东西来存储所有列,并在列表结构中分配一个指向已分配内存的指针。下面是一个例子:

typedef struct listNode_s {
void **columns;
size_t columnsCount;
struct listNode_s *next;
} listNode;

创建列表节点时:

void **columns = malloc(sizeof(void*) * count);
for(i=0; i < count; ++i) {
columns[i] = get_column(i);
}
listNode *node = malloc(sizeof(listNode));
node->columns = columns;
node->columnsCount = count;
//Insert the node to your list

//When freeing your node
free(node->columns);
free(node);

附注也许使用 union + enum 作为类型而不是 void* 作为数据会更好。

关于c - 具有多个数据字段的通用列表 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40121576/

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