说明
字符串常量会放入程序的静态区,并且是只读数据段。由于是只读数据,编译器会合并相同的字符串常量。
实验代码
/** * @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"报警告。
- 对字符串常量的修改会引发程序异常。