※ 引述《ugoc (打球啦)》之銘言:
: ※ 引述《Quezacot (還差C++ >.<)》之銘言:
: : compile會過,但run會當。
: : 如果問題出在你說的地方,compile是不會過低。
: 問題的確是出在這裡
: 因為這個statement是一個string assigned to a char*
: 不可以更改string literal裡頭的東西
: 如果用array
: 則每一個char都每分配給每一個位址
: 所以可以更改
: 我其實不是很了為什麼
: 或許有設計上的需要吧
char *ptr = "abcde";
這是說把一個char pointer用const string定義
感覺起來 好像又是一個無定義的操作....@@
(別懷疑 C++ standard常有這種事)
char a[] = "abcde";
意思是 a是個c style字串
注意歐 我沒說這個string的size歐
所以 可以把array當pointer用 但是不能把pointer當array用.....@@
但是可以間接利用ptr去操作c style string
(向我上面post的code)
或許 為了區別c-style array和char pointer所以有這種語法上的限制吧...
但是感覺起來 實作是一樣的
甚至連
char * ptr = "abcde";
ptr[0] = 'f';
compile都會過耶(雖然會當)
我真的被搞昏了.....
所以我猜 ptr和array的實作都是記憶體位置
用他的型態決定到底再做I/O的時候 要對多少byte做動作
所以 prt[0]這樣的code會過
所以 char*和char array根本試一樣的咚咚(所以間接操作ok)
只是compiler在compile時會有語法上的規定
but 安仔的code會當的理由還是不知道.....@@
--
※ 發信站: 批踢踢實業坊(ptt.csie.ntu.edu.tw)
◆ From: 218.160.7.242