2014-03-19 158 views
0

我创建了一个结构,其中包含一个char变量。在方法中使用它时,我想为它分配一个字符串值,然后将其打印出来。我一直在环顾四周,但找不到有效的答案,但找不到我做错了什么。为什么我得到下面的错误?将变量赋值给结构成员

这是我曾尝试:

struct node{ 
    char *val; 
    struct node *first; 
    struct node *last; 
}; 


void main(){ 
     struct node *new_node; 
new_node =(struct node *)malloc(sizeof(struct node)); 
    new_node.val = "a"; 
    printf("%s",new_node.val); 
} 

我得到的错误:

request for member 'val' in something not a structure or union 
+0

您需要使用' - >'not'.',因为它是一个指针。 –

+0

您还应该使用“%c”而不是“%s” - “%s”正在等待指向NULL终止的字符数组的指针。如果您提供带有字符的“%s”,则printf会将该字符视为会崩溃或输出一些垃圾的指针。 – thisisdog

+0

我做了一个编辑...我应该写char * val – JustBlossom

回答

2

new_node应该作为一个指针来访问,而不是一个实例。 尝试new_node->val代替new_node.val

响应编辑的问题 正如你从char val改为char *val你将需要额外的处理:

  1. *val分配内存:new_node->val=(char*)malloc(sizeof(char))
  2. 分配需要取消引用指针:*(new_node->val)="a"
  3. 打印语句肩D还取消引用指针:printf("%c",*(new_node->val))
  4. 你应该释放new_node之前释放val指针:free(new_node->val)
+0

正如thisisdog所提到的那样,一旦你解决了你当前的问题,你将会有额外的错误。在显示字符时使用'%c'和在显示字符串时使用'%s'(空字符结尾数组) – Suryavanshi

+1

在给数据分配字符串时要小心。 malloc newnode-> val(使用strlen +1),然后使用strcpy来分配。然后,你不会有任何问题打印VAL为%s) – Inox

0

new_node.val应new_node-> VAL所取代。因为new_node是一个指针。请记住,new_node-> val(通常称为箭头运算符)是(* new_node).val的简写形式。

此外,我相信你可以这样写:

node *new_node = malloc(sizeof(node)); 

更容易阅读和简洁的代码,因为的malloc只会返回一个指针给定的内存地址。在编译程序时使用--Wall或其他警告标志,以便体验逻辑错误或seg错误。