關於常字串的疑惑(BCB和VC的結果不同) |
答題得分者是:justdo
|
fusung
中階會員 發表:26 回覆:169 積分:99 註冊:2003-11-25 發送簡訊給我 |
以下是我從書上(http://delphi.ktop.com.tw/topic.php?TOPIC_ID=63691) p.167看到的:
引言:一個字元指標指到一常字串(string literal),在C 中字串內的資料是固定不變的,不能在程式執行中被改變,因此以下的方式是錯誤的: char *foo = "fish"; foo[0] = 'F'; //錯誤
------
The first step toward proving things for yourself is to understand how others have done it before! |
tsengsw
一般會員 發表:0 回覆:2 積分:0 註冊:2005-01-21 發送簡訊給我 |
|
tsengsw
一般會員 發表:0 回覆:2 積分:0 註冊:2005-01-21 發送簡訊給我 |
|
justdo
高階會員 發表:2 回覆:359 積分:222 註冊:2004-08-17 發送簡訊給我 |
|
fusung
中階會員 發表:26 回覆:169 積分:99 註冊:2003-11-25 發送簡訊給我 |
引言: 有關1,2兩點,我測試的確是這樣,大概是BCB實作的問題 有關3 char foo[] = "fish"; 會真的配置5bytes的空間給予foo這個變數,其型態為char* 所以你可以合法地修改其值justdo, 你好: 謝謝你的回答,讓我有以下的領悟 【領悟 class="code"> char foo[] = "fish"; 等同於 char foo[5] = "fish";其意義如同你所說的"會真的配置5bytes的空間給予foo這個變數" 相當於初始化foo這個矩陣的每個element,依序存 入"f" ,"i", "s" ,"h" 和 "\0", 所以"fish"的資料是否為const則不是重點(事實上"fish"它是,而在這是扮演初 始化foo的角色),重點是foo是一個非const的字元陣列,所以就可以變動之。 【領悟2】 假設"fish"是const這句話是對的,則如果用以下的方式 char *foo = "fish";foo指向一個const字串,所以foo並未真實擁有自己的一份資料("fish"), 而"fish"是const,所以不能透過foo間接變動之。 在此順便回應tsengsw的回覆,compile是會過(這是我原提問用辭不夠精準), 可是會發生 class="code"> const char *foo = "fish"; 另外,如果是用 char *foo = "fish";則BCB會認定programmer想要"fish"為非const字串,所以就可以透過 foo[0]間接變動其內容。而VC 則保有"fish" const的特性,在執行 時才會查覺foo[0]企圖變更一個 const,因此發生run-time error。 以上是我的一些想法,如果有觀念錯誤,請不吝指教 //============= //努力學習中... //=============
------
The first step toward proving things for yourself is to understand how others have done it before! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |