C列表 - 访问结构的成员并打印它

时间:2012-10-29 00:16:15

标签: c list struct nodes

我在使用C语言列表时遇到了一些问题。

我制作了这个结构:

typedef struct str {
char * str;
struct str * prox;
struct str * ant;
} cadena;

然后在main中我以第一个指向NULL的方式启动列表。

cadena * lista = NULL;

然后我创建了一个函数,用户可以在列表中添加新元素(“str”成员中的字符串),然后管理构建列表的指针。这似乎工作正常。我希望。

但是当我想要打印一个节点的成员时,我正试图使用​​这样的东西,它不起作用:

void showdata (cadena *lista) {
    int i=0;
    while (lista.str[i] != '\0')
    {
        printf("%c\n",str[i]);
        i++;
    }
}

我收到了这些错误:

from line "while (lista.str[i] != '\0')"
.error: request for member ‘str’ in something not a structure or union 

(为什么它期待一个结构?我以为我正在访问那里的成员)

from line "printf("%c\n",str[i]);"     
.error: ‘str’ undeclared (first use in this function)

(是不是用结构声明了?)

我肯定做了一些非常错误的事情,但我无法理解访问char成员并打印它的正确方法。

提前谢谢。

3 个答案:

答案 0 :(得分:1)

lista.str[i]

应该是

lista->str[i]

在指向您使用的结构的指针的任何地方 - >没有。

答案 1 :(得分:1)

尝试:

while (lista->str[i] != '\0')
    printf("%c\n",lista->str[i++]);

答案 2 :(得分:0)

这是指针符号问题。 C可能会以这种方式混淆。

lista.str[i]

不起作用,因为C无法识别“。”移动到一个领域。对于像我这样习惯于使用C#或其他OOP语言的人来说,这可能是个问题,你可以使用“。”修改对象的属性,如

control.visibility = "False"

在C中,结构基于指针,因此您需要使用 - >像基思说的那样。您将指向到内存中的某个位置,或者某个字段所在的结构中的“位置”。可以这样想,你不应该有太多问题。

C还允许您使用“。”...但仅当您强烈键入引用时。对你来说,这意味着要去

(*lista).str[i]

这样你对lista实例的引用就被视为指向struct的指针。

所以,在审查中,要么

lista->str[i]

(*lista).str[i]

应该工作。