請教Char, PChar, String的區別 |
答題得分者是:P.D.
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 請教各位前輩. Char, PChar和String的區別是什么? 可否舉個例子說明, 感謝! ===================== 努力,相信會獲得美麗! 忻晟A string represents a sequence of characters a Char Object Pascal uses the ASCII character set, including the letters A through Z and a through z, the digits 0 through 9, and other standard characters. It is not case-sensitive. The space character (ASCII 32) and the control characters (ASCII 0 through 31including ASCII 13, the return or end-of-line character) are called blanks. A PChar is a pointer to a null-terminated string of 8-bit characters. 其實很多書都有介紹 char 是以存放 0 到 255的 ASC碼為主, 例如 例1. var cstr: Char; .... cstr:= Chr(65); --> 傳回 # 符號 ... 例2. var astr: string; bstr: Char; ... astr:= 'This is a Book'; bstr:= astr[2]; --> bstr 傳回 h 符號 string 應該不用多做解釋 定義 string 時, 最長為 255 Characters, 也就是0-255個char的陣列 但陣列0的值是記錄該string的長度, 但我們不可以直接引用這個陣列值 例如 astr[0] 這是會錯誤, 但我們可以改變該值 例 var astr: string; ... astr:= '12345'; showmessage(astr); --> 傳回 12345 showmessage(inttostr(length(astr)); --> 傳回 5 setlength(astr,3); showmessage(astr); --> 賣個關子, 你覺得傳回何值? showmessage(inttostr(length(astr)); --> 賣個關子, 你覺得傳回何值? pChar 是一個以null值為結尾的8bit指標型態的值, pChar的出現主要是為了 相容於C語言及WIN API函數的引用, 但完全不相容於STRING 這個要舉例說明並不容易 我們最常用的 Application.MessageBox()函數來說 Application.MessageBox('這是一個視窗','訊息',MB_OK) 以上的表現方式沒有問題 但如果是這樣 var astr: string; ... astr:= '這是一個視窗'; Application.MeessageBox(astr,'訊息',MB_OK) 編譯時就錯了, 因為必須以pChar來表現 如 Application.MessageBox(pChar(astr),'訊息',MB_OK); 這就說明 stirng 不可直接引用於 pChar型態, 必須透過pChar()型態轉換 但 pChar型態卻是可以直接當 string 來用! 以上簡單說明, 欲知詳請, 請查閱各大書刊!! |
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
感謝P.D版主詳細的為小弟解答﹒
----------------------------------------------------------------------
例1.
var cstr: Char;
....
cstr:= Chr(65); --> 傳回 # 符號
這一句轉回的值應該是A, P.D版主是否筆誤﹖
----------------------------------------------------------------------
var astr: string;
...
astr:= '12345';
setlength(astr,3);
showmessage(astr); --> 賣個關子, 你覺得傳回何值?
這里傳回的值應該是123
showmessage(inttostr(length(astr)); --> 賣個關子, 你覺得傳回何值?
這里傳回的值應該是3
----------------------------------------------------------------------
以上回答若有錯誤﹐請P.D版主糾正﹒
另外出現AccessViolation的錯誤信息是什么原因造成的呢﹖
procedure TForm1.FormCreate(Sender: TObject); Var AString : PChar; begin AString := 'DELPHI IS GOOD'; ShowMessage(StrLower(AString)); end;//[blue]String可以直接引用PChar形態值﹐那以上的ShowMessage執行時就會出現上述的錯誤了﹐懇請前輩指正﹒ 謝謝﹗ ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟 |
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |