這是我的代碼:爲什麼在下面的代碼段錯誤?
char * name[]={"Dileep","Avina"};
name[0][1]='A';
這裏的名字[0]是一個字符*指向字符串文字 「迪利普」。那麼名稱[0] [1]是什麼?爲什麼它給我的運行時錯誤?
這是我的代碼:爲什麼在下面的代碼段錯誤?
char * name[]={"Dileep","Avina"};
name[0][1]='A';
這裏的名字[0]是一個字符*指向字符串文字 「迪利普」。那麼名稱[0] [1]是什麼?爲什麼它給我的運行時錯誤?
「Dileep」和「Avina」是字符串常量。試圖改變它們是未定義的行爲。如果操作系統將它們放在只讀存儲器中,則會出現故障。
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。
字符串文字是不變的,你不能改變它們。 – tkausl
[爲什麼在寫入以「char \ * s」初始化但不是「char s \ [\]」的字符串時爲什麼會出現分段錯誤?](http://stackoverflow.com/questions/164194/爲什麼這樣做 - 分段錯誤 - 當寫入字符串初始化 - 用cha) –
在編寫C++時停止使用'const char *'或'char *',使用'std :: string'。 –