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