【问题标题】:not able to modify strings on stack in c [duplicate]无法在c中修改堆栈上的字符串[重复]
【发布时间】:2012-12-23 23:39:21
【问题描述】:

可能重复:
Why does char* cause undefined behaviour while char[] doesn’t?

以下代码

int main() {
  char * st = "abc";
  *st = 'z';
  return 0;
}

正在返回分段错误。如果堆栈上的字符串不可修改,为什么在编译时不报错?

【问题讨论】:

  • 字符串文字是只读的。改为声明一个 char array。这是一个非常常见的问题,顺便说一句。有关示例,请参阅 this question
  • 字符串不在栈上。它在数据段中。 (指向字符串的指针在堆栈上)。
  • 出于兼容性原因,它不会给出编译时错误。 "abc" 的类型实际上是 char const[4],这产生编译器错误。
  • @K-ballo 不在 C 中,"abc" 在 C++ 中是 const char[4],但在 C 中是 char[4]。一个你不能尝试修改,但类型不会告诉你的。

标签: c string stack


【解决方案1】:

栈上的变量st是一个指针。分配的值是一个字符串常量(只读)。

【讨论】:

    【解决方案2】:

    char *str = "this is dangerous to modify"; 不是您所理解的字符串;它被称为字符串文字,根据标准对其进行修改会产生未定义的行为。

    如果您想要一个稍后可以修改的字符串,请执行以下操作:

    char str[] = "Some String";
    

    然后进行相应的修改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2018-02-23
      • 2018-07-11
      • 1970-01-01
      • 2023-01-16
      相关资源
      最近更新 更多