【问题标题】:Assign variable to struct member将变量分配给结构成员
【发布时间】:2014-03-19 01:18:27
【问题描述】:

我创建了一个结构,其中包含一个 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

【问题讨论】:

  • 你需要使用-> 而不是.,因为它是一个指针。
  • 您还应该使用“%c”而不是“%s”——“%s”需要一个指向以 NULL 结尾的字符数组的指针。如果你为 "%s" 提供一个字符 printf 会将该字符视为一个指针,它会崩溃或输出一些垃圾。
  • 我做了一个编辑...我应该写 char *val
  • 你怎么能在任何函数之外调用malloc?您是否使用 main 的定义重新排序了该行?
  • C 没有方法...

标签: c struct char var


【解决方案1】:

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. 打印语句还应该取消引用指针:printf("%c",*(new_node->val))
  4. 你应该在释放new_node之前释放val指针:free(new_node->val)

【讨论】:

  • 正如thisisdog 所提到的,一旦您解决了当前的问题,您将遇到其他错误。显示字符时使用“%c”,显示字符串时使用“%s”(以空字符结尾的字符数组)
  • 在为您的数据分配字符串时要小心。 malloc newnode->val(使用strlen +1)然后使用strcpy来赋值。然后,将 val 打印为 %s 时不会有任何问题)
【解决方案2】:

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

我也相信你会写:

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

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

【讨论】:

    猜你喜欢
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多