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

标签 c pointers segmentation-fault malloc 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: %s\n", 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() 转换返回类型;其他人是。

关于c - 为什么这个简单的 strcpy(...) 会导致段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19920178/

相关文章:

c - 如果输入具有特定大小和格式,为什么 fgets 调用会被忽略?

c++ - 引用指针的可选参数?

c - 指向结构体变量的指针的大小是多少?

使用 fseek 时 C 代码出现段错误

c - SSL_CTX_new 中的段错误

c - Bison 抛出一个段错误,假设它与 *char 有关

c - memcmp C 实现 - 任何与此有关的逻辑错误

c++ - 为什么 `int >> 32` 不总是零?

c - C 代码的未知输出

c++ - 带有指针和比较器C++的优先级队列