C - 为什么这个简单的strcpy(..)会导致分段错误



我不明白一些简单的事情。

我有此示例代码:

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指向的位置开始读取,直到遇到

要么fname数组,然后初始化它。或者分配 fname 并初始化它。

相关内容

  • 没有找到相关文章

最新更新