将变量赋给struct成员

时间:2014-03-19 01:18:27

标签: c struct char var

我创建了一个带有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

2 个答案:

答案 0 :(得分: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. Print语句还应取消引用指针:printf("%c",*(new_node->val))
  4. 在释放val之前,您应释放new_node指针:free(new_node->val)

答案 1 :(得分:0)

new_node.val应替换为new_node-> val。因为new_node是一个指针。请记住,new_node-> val(经常被称为箭头运算符)是(* new_node).val的缩写。

我相信你也可以写:

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

为了更容易阅读和更清晰的代码,因为malloc只返回指向给定内存地址的指针。在编译程序时使用-Wall或其他警告标志,以减少逻辑错误或seg故障。