Strcpy()上的C - Seg错误

时间:2018-04-23 05:30:32

标签: c string malloc strcpy

我正在尝试以下方法为key赋值,这是stuct的一部分。 Key是指向char的指针。

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

当我运行它时,我在strcpy行上遇到了一个seg错误。这里发生了什么?感谢。

1 个答案:

答案 0 :(得分:1)

代码段可能导致问题的唯一方法是malloc实际上失败(返回NULL)。

除此之外,应该没有问题。任何可能失败的调用都应该被检查,如果失败可能导致以后出现问题,那么内存分配后再取消引用该内存肯定属于该描述。

更好的解决方案是:

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

您会注意到我还更改了malloc电话。在C中,从malloc投出返回值很少是个好主意:

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

此外,从不需要乘以sizeof(char),因为根据定义,它总是一个。