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)
,因为根据定义,它总是一。
我正在尝试以下操作来为键赋值,它是结构的一部分。键是指向字符的指针。
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)
,因为根据定义,它总是一。