使用gcc编译时出现以下两条错误消息
error: request for member ‘name’ in something not a structure or union
else if(strcmp((*node).name, (*root).name) < 0)
error: incompatible types when assigning to type ‘char[101]’ from type ‘char *’
(*node).name = SomeString;
从我发现的第一个错误通常发生在你尝试调用这样的节点时
node.name;
而不是
(*node).name;
由于情况并非如此,我想知道导致错误的原因以及如何解决错误?
节点定义为:
struct person {
char name[42];
struct person *left, *right;
} root;
并由
创建struct person *node;
node = (struct person *) calloc(1, sizeof(struct person));
(*node).name = SomeString;
答案 0 :(得分:1)
数组没有赋值运算符。如果要将字符串分配给字符数组,则必须在标题strcpy
中为字符数组使用标准函数<string.h>
#include <string.h>
//...
strcpy( (*node).name, SomeString; );
至于第一个错误,root
不是指针。你必须写
else if(strcmp((*node).name, root.name) < 0)
而不是
else if(strcmp((*node).name, (*root).name) < 0)
我认为将root
定义为
struct person {
char name[42];
struct person *left, *right;
} *root = NULL;
答案 1 :(得分:0)
尝试使用
node->name
由于node是一个指针,你必须访问结构成员,如上所示。
还应使用strcpy()为结构成员赋值。
strcpy(node->name,"hello");
struct person *root;
将解决您的第一个错误
答案 2 :(得分:0)
更优选且大多适合使用' - &gt;' (箭头操作符)在我们使用指针变量访问它时访问结构成员
而不是
(*node).name
我们可以用
node->name
有关C语言中字符串的更多信息,您可以访问此Wiki链接,这将非常有用: