char *與AnsiString一問 |
答題得分者是:brook
|
gump996
一般會員 發表:10 回覆:8 積分:3 註冊:2002-10-18 發送簡訊給我 |
在Builder5中,有一個我呼叫的DLL(在VC 6.0上寫的)函式宣告如下: BOOL ConnectServer(char szHost[], int iPortNum); 在程式中宣告: char szHost[] = "127.0.0.1";
int iPort = 2002; 然後呼叫ConnetServer(szHost, iPort);
連結可以成功; 但是我換另一種方式,假設有一個Edit元件,是用來輸入Host Name的,
加上宣告入下: char *szHost;
int iPort = 2002; szHost = Edit->Text.c_str(); 然後呼叫ConnetServer(szHost, iPort);
連結卻會失敗; 接著我用另一種方式,宣告如下: char szHost[64];
int iPort = 2002; strcpy(szHost, Edit->Text.c_str()); 然後呼叫ConnetServer(szHost, iPort);
連結卻又可以成功; 請問各位前輩原因何在?謝謝!
|
brook
資深會員 發表:57 回覆:323 積分:371 註冊:2002-07-12 發送簡訊給我 |
char *szHost;
int iPort = 2002;
szHost = Edit->Text.c_str(); 1.此指令是把 szHost 指標指向 .c_str() 所產生字串的位置
2.但很不幸的 .c_str() 所產生字串的位置馬上又歸還系統(free 掉), 如此系統又可能把此記憶體用來作其他用途.
3.你可追蹤下列程式,看看 szHost 和 ss 的變化
AnsiString ss = "888";
char *szHost = ss.c_str();
ss = "8";
如此 szHost 值就變掉了.
|
gump996
一般會員 發表:10 回覆:8 積分:3 註冊:2002-10-18 發送簡訊給我 |
引言: char *szHost; int iPort = 2002; szHost = Edit->Text.c_str(); 1.此指令是把 szHost 指標指向 .c_str() 所產生字串的位置 2.但很不幸的 .c_str() 所產生字串的位置馬上又歸還系統(free 掉), 如此系統又可能把此記憶體用來作其他用途. 3.你可追蹤下列程式,看看 szHost 和 ss 的變化 AnsiString ss = "888"; char *szHost = ss.c_str(); ss = "8"; 如此 szHost 值就變掉了.謝謝前輩的回答,我用如下的程式碼測試: void __fastcall TForm1::FormCreate(TObject *Sender) { AnsiString as = "888"; char *sz; sz = as.c_str(); Edit1->Text = AnsiString(sz); }但是我在Debug Inspector中看sz卻是: sz: char *:0063FCF8::011953E0 "888" 原因是在於c_str()還沒free嗎? 如果是的話,我要如何才能知道他何時會被free? 發表人 - gump996 於 2002/10/22 18:39:05 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |