gpt4 book ai didi

c - 如何获取结构体内部的结构体并将其分配给结构体数组

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

如果这是一个非常简单的问题,我很抱歉,但我对 C 真的很生疏,到目前为止谷歌搜索还没有帮助。我有一个 C 函数,它接受一个结构数组和一个整数:

int foo(struct record *records, int n)
{

}

还有一个链表,其中每个节点都有一个结构:

struct rnode
{
struct record rec;
struct rnode *next;
}

结构记录是:

struct record
{
enum recordtype type;
union recordvalue
{
int intval;
char strval[19];
} value;
};

inside foo(struct record , int) 我正在迭代链接列表并将前“n”个结构记录分配到数组中,如下所示:

int foo(struct record *records, int n)
{
int count = 0;
struct rnode *cur = recordlist;
while(cur != NULL)
{
records[count] = cur->rec; //Basically, how do I write this line?
printf("%d\n", records[count].type); //Both these print the correct values
printf("%d\n", records[count].value.intval); //Prints correct values
count++;
}
}

我尝试这样做: 记录[计数] = cur->rec

它可以编译,但是当我执行以下操作时:

struct record *records = malloc(sizeof(struct record)*n);
foo(records, n); //This should populate the array records but it isn't.
//If I print record[0].value.intval here I get 0.

但是当我将 &records[0] 传递给另一个函数时,例如:

checkrecord(&record[0]);

其中声明了 checkrecord:

checkrecord(const struct record *r)

在该函数内,r->type 和 r->value.intval 都返回 0 而不是正确的值。

我很确定我正确地将结构记录存储到数组中,但我不确定我还做错了什么。

我不想听起来很固执,但问题是 checkrecord() 函数我无权更改,但我可以更改向其传递参数的方式。

最佳答案

*(cur->rec)

考虑到您发布的示例,这应该不起作用。

复制记录结构的正确方法是:

records[count] = cur->rec;

如果你想要一个指向链表中实际结构的指针,你需要有一个指针数组来记录,而不是你当前的记录数组。在这种情况下,您可以分配:

records[count] = &(cur->rec);

关于c - 如何获取结构体内部的结构体并将其分配给结构体数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5001627/

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