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

时间:2011-02-15 09:09:09

标签: c arrays linked-list struct

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

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

}

以及每个节点都有结构的链表:

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

和struct记录是:

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

在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++;
    }
}

我尝试过:     记录[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()函数我不能自由改变,但我可以改变我将参数传递给它的方式。

3 个答案:

答案 0 :(得分:0)

*(cur->rec)

根据您发布的样本,这不应该有效。

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

records[count] = cur->rec;

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

进行分配
records[count] = &(cur->rec);

答案 1 :(得分:0)

记录[count] = cur-> rec是正确的,但是你缺少cur = cur-> next。记录[1]是第二个记录,& record [1]是它的地址。

答案 2 :(得分:0)

感谢大家的帮助。这实际上是其他地方的记忆问题。上面的代码是正确的。