我创建了一个带有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 :(得分:2)
new_node
作为指针而不是实例进行访问。
尝试new_node->val
而不是new_node.val
对已修改问题的回复
当您从char val
更改为char *val
后,您需要进行额外处理:
*val
分配内存:new_node->val=(char*)malloc(sizeof(char))
*(new_node->val)="a"
printf("%c",*(new_node->val))
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故障。