2016-06-09 60 views
0

這是我的代碼:爲什麼在下面的代碼段錯誤?

char * name[]={"Dileep","Avina"}; 
name[0][1]='A'; 

這裏的名字[0]是一個字符*指向字符串文字 「迪利普」。那麼名稱[0] [1]是什麼?爲什麼它給我的運行時錯誤?

+6

字符串文字是不變的,你不能改變它們。 – tkausl

+1

[爲什麼在寫入以「char \ * s」初始化但不是「char s \ [\]」的字符串時爲什麼會出現分段錯誤?](http://stackoverflow.com/questions/164194/爲什麼這樣做 - 分段錯誤 - 當寫入字符串初始化 - 用cha) –

+0

在編寫C++時停止使用'const char *'或'char *',使用'std :: string'。 –

回答

3

「Dileep」和「Avina」是字符串常量。試圖改變它們是未定義的行爲。如果操作系統將它們放在只讀存儲器中,則會出現故障。

0

name [0]是指向字符串文字「Dileep」的char *。

不,char * name[]是虛假的。 "Dileep"string literal,其類型爲const char[7],並且從C++ 11開始,由於從字符串文字到char *的轉換,您的代碼是不允許的。 char * name[]={"Dileep","Avina"};應該是const char * name[]={"Dileep","Avina"};

那麼名稱[0] [1]是什麼?

它應該是const char

爲什麼它給我的運行時錯誤?

修改字符串文字是UB。

相關問題