我不理解简单的事情。
我有这个示例代码:
typedef struct {
char* fname;
} PersonType;
int main() {
PersonType *p;
p = (PersonType *)malloc(sizeof(PersonType));
char * name = "Robert";
/* this next line causes a segmentation fault */
strcpy(p->fname, name);
printf("name: %s\n", p->fname);
}
为什么'strcpy'会出现分段错误?我究竟做错了什么?
非常感谢任何帮助,谢谢!
罗布
答案 0 :(得分:4)
虽然您为结构分配了空间,但您既没有为字符串分配空间,也没有在结构中初始化指针。你需要使用类似的东西:
if (p != 0)
{
if ((p->fname = malloc(strlen(name) + 1)) != 0)
strcpy(p->fname, name);
else
free(p); // Report error too?
}
请注意,这会检查内存分配的结果。我对你是否为malloc()
转换返回类型并不感兴趣;其他人都是。
答案 1 :(得分:2)
您的PersonType
结构包含一个指向您永远不会分配的字符串的指针,也不包含指定。因此fname
是您尝试写入的未初始化指针。您需要为fname
分配缓冲区。
int main() {
PersonType *p;
p = (PersonType *)malloc(sizeof(PersonType));
p->fname = malloc(sizeof(char)*7);
char * name = "Robert";
要么使fname
成为char
数组,以便你的结构本身包含一个缓冲区。
答案 2 :(得分:1)
fname
未初始化为任何内容。 strcpy
将从位置fname
开始继续阅读,直至遇到\0
。
使fname
成为一个数组,并初始化它。或者分配fname并初始化它。