2014-09-24 51 views
0

因此,此代碼是否可能會導致段錯誤,因爲指針僅在第一個內存地址和內存位置可能超出可用範圍之後被分配了第一個內存地址和內存位置?或者它會像一系列字符一樣自行分配它。將字符串寫入字符指針時的內存行爲

int main(){ 
    char *final; 
    final = "This might cause a segfault. Especially if I am SUPPERRR LOOOOOOOOONNNNGG"; 

    return 0; 
} 

回答

1

您對字符串文字的使用非常好。

從C++標準草案(N3337):

2.14.5字符串文字

8普通字符串和UTF-8字符串文字也稱爲窄字符串文字。窄字符串文字具有「數組nconst char」,其中n是如下定義的字符串的大小,並具有靜態存儲持續時間(3.7)。

...

12是否所有字符串文字是不同的(即,被存儲在非重疊的對象)是實現定義。試圖修改字符串文字的效果是未定義的。

3.7.1靜態存儲

1不具備動態存儲時間,不具有線程存儲時限,而不是本地的所有變量都靜儲存期限。這些實體的存儲應持續在程序期間

只要您不嘗試通過指針更改字符串文本的內容,就沒有問題。