線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2538
推到 Plurk!
推到 Facebook!

請教Char, PChar, String的區別

答題得分者是:P.D.
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-13 01:49:30 IP:63.84.xxx.xxx 未訂閱
請教各位前輩.    Char, PChar和String的區別是什么? 可否舉個例子說明, 感謝!    ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-13 02:37:02 IP:61.66.xxx.xxx 未訂閱
引言: 請教各位前輩. 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-13 08:35:57 IP:211.21.xxx.xxx 未訂閱
引言: ..... string 應該不用多做解釋 定義 string 時, 最長為 255 Characters, 也就是0-255個char的陣列 .....
如我沒說錯的話...我記得那是 Delphi 1.0 時的定義,Delphi 2.0 以後,String 的長度好像是 2GB , 也就是可以塞入非常多的字元 如 VAR S:STRING; S=Memo1.Text; (Memo 的內容可以是一片長篇小說)
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-13 11:14:29 IP:63.84.xxx.xxx 未訂閱
感謝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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-13 11:44:48 IP:61.70.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=37323
------
︿︿
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-09-13 13:38:24 IP:63.84.xxx.xxx 未訂閱
感謝三位版主,前輩的指點.    ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-09-13 20:27:22 IP:61.66.xxx.xxx 未訂閱
引言: 感謝P.D版主詳細的為小弟解答﹒ ---------------------------------------------------------------------- 例1. var cstr: Char; .... cstr:= Chr(65); --> 傳回 # 符號 這一句轉回的值應該是A, P.D版主是否筆誤﹖
哦, 不是筆誤, 是手誤!
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-09-13 20:31:00 IP:61.66.xxx.xxx 未訂閱
引言: String可以直接引用PChar形態值﹐那以上的ShowMessage執行時就會出現上述的錯誤了﹐懇請前輩指正﹒ 謝謝﹗
我想你這個問題在另一封已有解答了, 而且上面也已談過, string 不可引用為pChar, 而 StrLower(...:PChar) , 內定必須以PChar來代入, 所以用 string 一定發生錯誤!
系統時間:2024-05-09 0:13:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!