2014-09-30 102 views
-3

我正在運行下面的代碼。我得到運行時錯誤。C++中的字符指針

#include <iostream> 
using namespace std; 

int main() { 
    char *p="hello"; 
    //p="Hi"; 
    *p='G'; 
    cout<<*p; 
    return 0; 
} 

,如果這是給錯誤又是什麼用途爲const char * p的= 「你好」;在這種情況下,我的字符串應該是字符* P不變不等於 「你好」

+0

您無法更改鏈接器放置'char [5]'文字的內存。編譯時還要切換所有警告。 – 2014-09-30 16:33:17

+3

自C++ 11以來,此代碼不再合法。字符串文字現在只會衰減爲'const char *'。 – jrok 2014-09-30 16:36:03

+1

[C++程序員應該知道的所有常見未定義行爲是什麼?]的可能重複(http://stackoverflow.com/questions/367633/what-are-all-the-common-undefined-behaviours-that- ac-programmer-should-know-a) – Deduplicator 2014-09-30 16:36:07

回答

1
char *p="hello"; 
*p='G'; 

你讓p指向一個常量,「你好」。但是,然後你試圖修改什麼p指向。根據定義,常量不能被修改。

+0

const char * p =「hello」的用法是什麼 – Aman 2014-09-30 16:44:29

+0

@Aman const char *有很多用法 – 2014-09-30 17:01:34

+0

@Aman None真。你應該使用'const char * p =「hello」;'來避免這樣的錯誤。使用非const指針指向常量幾乎不是一個好主意。 – 2014-09-30 17:04:09