当我发现这段代码时,我正在阅读一些主题,第一条注释说
存储在只读内存区域
这是什么意思?我怎么知道如果字符串或变量是只读的?
char *p = "wikipedia"; // stored in a read-only memory area valid C, deprecated in C++98/C++03, ill-formed as of C++11
p[0] = 'W'; // undefined behavior
string "wikipedia"是只读的,因为它是在代码中声明的文字常量。
*p
是一个指针,它指向的内存包含字符串"wikipedia"。由于该内存是使用明显已弃用的将字符串直接赋值给指针的方法分配的,因此它是只读的。
如果您希望它不是只读的,请在堆栈或堆上分配内存。(例如,通过使用malloc
)
"wikipedia"
它被称为字符串文字。它不必存储在只读存储器中。标准规定字符串字面值不能修改,如果你试图修改一个字面值,将调用未定义行为。
char *p = "Wikipedia";
定义了指针p
,它保存了字符串字面值"Wikipedia"的引用(地址)。
如果你想修改这个字符串,你需要定义一个char
数组:
char p[] = "Wikipedia";