说明
字符串常量会放入程序的静态区,并且是只读数据段。由于是只读数据,编译器会合并相同的字符串常量。
实验代码
/**
* @file constant_string.cpp
* @brief 测试常量字符串
* @copyright public domain
*/
#include <iostream>
int main() {
char* a = "string";
const char* b = "string";
std::cout << "a == b is " << (a==b ? "true" : "false") << std::endl;
a[1] = 'd'; // ERROR
return 0;
}
运行及结果
$ g++ constant_string.cpp
constant_string.cpp: In function ‘int main()’:
constant_string.cpp:10:12: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
char* a = "string";
^
$ ./a.out
a == b is true
段错误 (核心已转储)
a
和b
的地址相同。
- 编译器会对
char* a = "string"
报警告。
- 对字符串常量的修改会引发程序异常。