C - Strcpy() 上的段错误

C - Seg Fault on Strcpy()

我正在尝试以下操作来为键赋值,它是结构的一部分。键是指向字符的指针。

T->oa[i].key = (char*)malloc(5*(sizeof(char)));
strcpy(T->oa[i].key,"abc");

当我 运行 这样做时,我在 strcpy 行上遇到段错误。这里发生了什么?谢谢

如果 malloc 实际上失败了(returning NULL),那么该代码段可能会导致问题的唯一方式。

除此之外,应该没有问题。任何可能失败的调用都应该检查是否失败可能会在以后导致问题,并且内存分配之后取消引用该内存肯定属于该描述。

更好的解决方案如下:

T->oa[i].key = malloc(5);
if (T->oa[i].key == NULL)
    doSomethingIntelligent();
else
    strcpy(T->oa[i].key, "abc");

您会注意到我还更改了 malloc 调用。在 C 中,从 malloc 中转换 return 值很少是一个好主意,因为:

  • void * returned 可以隐式 转换为任何其他指针;和
  • 它可能会导致某些细微的错误。

此外,您永远不会需要乘以sizeof(char),因为根据定义,它总是一。