char *p = "abc";p[1] = 'x';
cout << p[1] << endl;
return 0;
以上**會產生執行時錯誤,去掉p[1] = 'x';或者把p定義改成char p = "abc"就能正常執行。
如
char *p = "abc";cout << p[1] << endl;
return 0;//或char p = "abc";
p[1] = 'x';
cout << p[1] << endl;
return 0;
這是因為char *p = "abc"把"abc"放在常量區,而char p = "abc"把"abc"放在變數區。
怎樣讓編譯器識別這個錯誤?char *p = "abc"是c語言的遺留風格,建議使用字元字面值定義字元指標時總是在前面加上const。如下定義:
const char *p = "abc";
這樣即使後面有要修改其值的語句編譯器也會報錯而不是產生執行時錯誤。
-----------------------** angelsthanatos
C風格字串與C 風格字串
c風格字串 對字串進行操作的 c 函式定義在標頭檔案中 1.字串定義 char result 2.字串的最後乙個字元是null字元 0 可以通過這個字元確定字串的結尾。3.strlen 返回的是字串的大小 因此,分配空間的時候,需要比字串的實際空間大1.e.g.char copystring con...
C風格字串與C 風格字串
c風格字串 對字串進行操作的 c 函式定義在標頭檔案中 1.字串定義 char result 2.字串的最後乙個字元是null字元 0 可以通過這個字元確定字串的結尾。3.strlen 返回的是字串的大小 因此,分配空間的時候,需要比字串的實際空間大1.e.g.char copystring con...
c風格字串與c風格字串陣列
include includeusing namespace std int main 輸出結果 0034ff10 0034ff10 0034ff04 013bdc80 char str abcd 先在文字常量區為 abcd 常量分配5b,接著在棧裡為指標str分配4b,並接收 abcd 字串的首位...