我在使用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成员并打印它的正确方法。
提前谢谢。
答案 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]
应该工作。