【问题标题】:strcpy() causes segmentation fault? [duplicate]strcpy() 导致分段错误? [复制]
【发布时间】:2011-11-22 10:31:36
【问题描述】:

可能重复:
Getting Segmentation Fault

为什么这段代码会导致分段错误?

char *text = "foo";
strcpy(text, "");

据我了解,第一行分配了一些内存(保存字符串“foo”),text 指向分配的内存。第二行将一个空字符串复制到text 指向的位置。

这段代码可能没有多大意义,但为什么会失败?

【问题讨论】:

  • 查看搜索结果。看他们!@#! stackoverflow.com/search?q=strcpy+segmentation+fault
  • 最好的副本是什么?我找不到它。
  • 它们并非完全重复,但错误通常是相同的。
  • 我同意约翰·库格曼。移动以关闭复制。
  • @quasiverse:在问这个问题之前,我看到SO上有很多类似的问题,但几乎所有的问题都是相反的,即声明char *text;而不分配内存。

标签: c++ c segmentation-fault strcpy


【解决方案1】:

只要你有一个字符串文字(在你的例子中是“foo”),程序就会将该值存储在内存的 readonly 部分中。

strcpy 想要修改该值,但它是只读的,因此出现分段错误。

另外,text 应该是 const char*,而不是 char*

【讨论】:

    【解决方案2】:

    因为字符串文字(如"foo")是只读的

    【讨论】:

      【解决方案3】:

      因为字符串文字存储在内存的只读区域中。

      因此尝试修改foo(在这种情况下使用strcpy)是一种未定义的行为

      【讨论】:

        猜你喜欢
        • 2018-07-28
        • 1970-01-01
        • 1970-01-01
        • 2017-10-20
        • 2013-11-24
        • 1970-01-01
        • 2013-08-25
        • 2012-05-06
        • 2014-12-21
        相关资源
        最近更新 更多