作者shadown (本帳號已停止使用)
看板C_and_CPP
標題[問題] 字串與指標的問題
時間Tue Apr 21 19:30:08 2009
請問一下,下面這個方法為什會執行時會出現錯誤呢?
void main()
{
char *a="i am a boy";
a[2]='A';
cout << a << "!!!\n";
}
若是將 char *a 改為 char a[20] 就可以了,不知道為什麼..@@
ps.(1)我用的是VC6
(2)編譯可以過,不過執行時會出現錯誤
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.133.117.77
※ 編輯: shadown 來自: 220.133.117.77 (04/21 19:30)
※ 編輯: shadown 來自: 220.133.117.77 (04/21 19:31)
※ 編輯: shadown 來自: 220.133.117.77 (04/21 19:33)
1F:推 VictorTom:char *a="i am a boy"; 代表ptr a指到一個const char 04/21 19:42
2F:→ VictorTom:array裡面的內容是"i am a boy"; 因為是const, 所以你 04/21 19:43
3F:→ VictorTom:a[2] = 'A'; 嘗試去改一個const自然就錯了.... 04/21 19:43
4F:→ VictorTom:改char a[20]可以是因為它是一個陣列a有20個char的空間 04/21 19:44
5F:→ VictorTom:裡面給initial值為"i am a boy", 所以寫a[2]是合法的:) 04/21 19:44
6F:→ VictorTom:編譯可以過代表語法是正確的, 但是執行時才發現你語意不 04/21 19:45
7F:→ VictorTom:對; 比如你可以char b[20]={...}; char *a=b; a[2]='A'; 04/21 19:46
8F:推 VictorTom:所以原來那樣的code, compiler是不負責幫你抓error的. 04/21 19:50
9F:推 ledia:置底十之四 04/21 19:51
10F:→ VictorTom:嗚嗚~~我推那裡辛苦, 又想不出來看過哪裡有解釋了Q_Q~ 04/21 19:52
11F:推 LiloHuang:存取 read-only text section 的常見問題 04/21 19:55
12F:→ shadown:原來這樣的宣告方式算是常數,謝謝~(置底那個我看不太懂..) 04/21 19:55
13F:→ LiloHuang:你如果是用 char [] 的話 他會做一次拷貝 04/21 19:55
14F:→ LiloHuang:有興趣 objdump 或者 gcc -S 看一下 asm 就瞭改哩 04/21 19:56