我不明白一些简单的事情。
我有此示例代码:
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: %sn", p->fname);
}
为什么在"strcpy"上会出现分段错误? 我做错了什么?
任何帮助都非常感谢,谢谢!
抢
尽管为结构分配了空间,但既没有为字符串分配空间,也没有初始化结构中的指针。 您需要使用类似以下内容的内容:
if (p != 0)
{
if ((p->fname = malloc(strlen(name) + 1)) != 0)
strcpy(p->fname, name);
else
free(p); // Report error too?
}
请注意,这将检查内存分配的结果。 我不担心你是否为malloc()
转换返回类型;其他人是。
PersonType
结构包含一个指向您永远不会分配或分配的字符串的指针。 因此,fname
是您尝试写入的未初始化指针。 您需要为 fname
分配缓冲区。
int main() {
PersonType *p;
p = (PersonType *)malloc(sizeof(PersonType));
p->fname = malloc(sizeof(char)*7);
char * name = "Robert";
要么这样做,要么fname
一个char
数组,以便您的结构在其内部包含一个缓冲区。
fname
没有初始化为任何东西。 strcpy
将继续从fname
指向的位置开始读取,直到遇到