【问题标题】:in C++ when a string is assigned to a pointer, why it stored it is read-only?在 C++ 中,当一个字符串被分配给一个指针时,为什么它存储它是只读的?
【发布时间】:2020-07-22 14:18:17
【问题描述】:

这是一个例子

char *pointer = “abc”;

如果我尝试更改此字符串 *(指针+1)='D';

返回255错误,为什么?

【问题讨论】:

标签: arrays pointers memory


【解决方案1】:

简短的回答是因为这是语言的定义

更长的答案是程序中包含的字符串是已编译程序文件的一部分,就像代码本身一样。在大多数现代操作系统中,这通常是只读的。为了使这些字符串可写,操作系统或语言运行时必须将它们复制到可写数据块中。由于这会耗费时间和内存,而且通常不是人们想要的,因此 C++ 默认不会这样做。

【讨论】:

  • 但是如果字符串被声明为数组[]="String";那么它可以被改变。将其分配给指针并使其可变在某种程度上是危险的?
  • 这与危险无关,它与您是否将数据复制到程序的数据区域中有关。 array[]="String" 是一个复制指令——创建一个数组(在程序的数据中)并通过从代码区域复制这七个字符来初始化它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-03
  • 1970-01-01
  • 2020-09-16
  • 1970-01-01
  • 1970-01-01
  • 2021-03-07
相关资源
最近更新 更多