【问题标题】:How to initialize a structure within a structure in C?如何在C中的结构中初始化结构?
【发布时间】:2013-10-20 22:58:57
【问题描述】:

我有这两种结构:

struct member {
  char *nickname;
  char *group;
};

struct node {
   struct member mbr;
   struct node   *next;
};

在我的代码中,我会这样做:

struct node* n = (struct node*)malloc(sizeof(struct node));

当我运行程序时,在这一行出现“分段错误”错误:

strcopy(n->mbr.nickname, temp->nickname);

我已经尝试了一段时间来解决这个问题,并且我在网上搜索过,但我还没有找到任何解决方案。我猜'n'里面的结构没有初始化。我做了一些看起来像这样的测试:

n->mbr = (struct member*)malloc(sizeof(struct member));

然后我得到另一个错误:“从类型'struct member *'分配给类型'struct member'时不兼容的类型”......

谁能告诉我我做错了什么?谢谢。

【问题讨论】:

  • strcopy() 是错字还是你自己的函数?

标签: c struct initialization structure


【解决方案1】:

你不需要分配mbr;你需要分配mbr.nickname

struct node* n = malloc(sizeof (struct node));
n->mbr.nickname = malloc(some number of characters);

然后使用str<i><b>n</b></i>cpy。或者,

n->mbr.nickname = strdup(temp->nickname);

这与这样做相同,但使用strlen(temp-&gt;nickname) + 1作为大小。

【讨论】:

  • 嗯,无论如何,strncpy 在字符串长度已知的情况下并不是一个好主意。那么最好使用memcpy
  • @JensGustedt:字符串的长度是否已知?如果想法是使用temp-&gt;nickname 找到它,我添加了strdup
  • 可能值得一提的是 strdup 是 POSIX 而不是标准 C。
  • OP 标记为 C,而非 posix - 坚持使用 strlen(x)(无 strndup 或 strdup)
  • 成功了!非常感谢,自从我上次做一些 C 编程以来已经有一段时间了,我想我还没有完全回到它;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-31
  • 1970-01-01
  • 2016-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多