【问题标题】:Modifying a C string: access violation [duplicate]修改 C 字符串:访问冲突 [重复]
【发布时间】:2009-06-22 07:40:08
【问题描述】:

可能的重复:
Why does simple C code receive segmentation fault?
Modifying C string constants?

为什么这段代码会产生访问冲突?

int main()
{
    char* myString = "5";
    *myString = 'e'; // Crash
    return 0;
}

【问题讨论】:

  • 这个问题大约每周在 SO 上被问一次 :),请给我一分钟时间找到原件,我会将您链接到它。
  • C 还是 C++?知道您正在使用哪种语言进行编码会很有用。
  • @Sev:让我回答一下:因为 myString 是一个 char array(即 C 风格的字符串),而 *myString 是数组中的第一个字符。 "5" 实际上是 { '5', '\0' }。
  • 这里有一个线程:stackoverflow.com/questions/1011455/…

标签: c++ c string


【解决方案1】:

*mystring 显然指向只读静态内存。 C 编译器可以在只读存储中分配字符串文字,在运行时可能不会写入。

【讨论】:

    【解决方案2】:

    字符串字面量被认为是常量。

    【讨论】:

      【解决方案3】:

      编写代码的正确方法是:

      const char* myString = "5";
      *myString = 'e'; // Crash
      return 0;
      

      在这种情况下,您应该始终考虑添加“const”,因此很明显,更改此字符串可能会导致未指定的行为。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多