【问题标题】:Segmentation fault with char array member of struct using strcpy()使用 strcpy() 的 struct 的 char 数组成员的分段错误
【发布时间】:2016-12-21 18:36:08
【问题描述】:

我有一个这样定义的struct TREE

typedef struct TREE {
    NODE *head;
} TREE;

一个struct NODE定义为:

typedef struct NODE {
    char boss[30];
    char name[30];
    struct NODE *firstChild;
    struct NODE *secondChild;
    struct NODE *thirdChild;
    struct NODE *fourthChild;
} NODE;

在我的主要,我有:

TREE companyStructure;
TREE *treeptr;
treeptr = &companyStructure;
strcpy(treeptr->head->name, "Ben");

但这给了我一个分段错误。有人可以帮我解释为什么会这样吗?是否有一些我没有做但我需要做的内存管理?

【问题讨论】:

标签: c arrays struct char strcpy


【解决方案1】:

直到,

treeptr = &companyStructure;

看起来不错。但是考虑到你有这个事实

NODE *head;

您需要为head 分配内存。所以你很可能错过了

treeptr->head = malloc(sizeof *treeptr->head);

做之前

strcpy(treeptr->head->name, "Ben");

另外,请查看[ this ],了解为什么要使用strncat 而不是strcpy

【讨论】:

  • 是的,这正是我所缺少的。作为 C 的新手,我了解如何使用指针,但是将指针嵌套在结构中会混淆我的思维过程。非常感谢。我去看看链接。
  • @Nick : 不客气,我相信你不会花时间去掌握它
  • strncpy 不是strcpy 的更安全版本。永远不要使用这个功能,它不会做你认为它做的事情。它很容易出错。您可以使用strlcpy 截断副本以适应目标。 strncpy 不会那样做。见en.wikipedia.org/wiki/Strlcpy
  • @chqrlie:感谢您的编辑,感谢。同意你说的,我只是想到了缓冲区溢出,但其他问题很明显。
猜你喜欢
  • 2013-04-05
  • 2020-02-28
  • 2017-04-19
  • 2015-02-28
  • 1970-01-01
  • 1970-01-01
  • 2019-05-09
  • 1970-01-01
  • 2019-03-19
相关资源
最近更新 更多