說明
字符串常量會(huì)放入程序的靜態(tài)區(qū),并且是只讀數(shù)據(jù)段。由于是只讀數(shù)據(jù),編譯器會(huì)合并相同的字符串常量。
實(shí)驗(yàn)代碼
/**
* @file constant_string.cpp
* @brief 測(cè)試常量字符串
* @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;
}
運(yùn)行及結(jié)果
$ 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
段錯(cuò)誤 (核心已轉(zhuǎn)儲(chǔ))
a
和b
的地址相同。
- 編譯器會(huì)對(duì)
char* a = "string"
報(bào)警告。
- 對(duì)字符串常量的修改會(huì)引發(fā)程序異常。