請教一個指標的問題 |
尚未結案
|
yangjack
一般會員 ![]() ![]() 發表:3 回覆:3 積分:1 註冊:2004-10-22 發送簡訊給我 |
目前在操作指標時有一個問題想請各位幫忙. TFileStream* File = new TFileStream(filename,(WORD)fmOpenReadWrite);
.
.
.(略)
char *buf=new char[size];
File->ReadBuffer(buf,size); 若要刪除buf中某一些指標中的值要如何刪除呢?
目前已測試 memset(&buf[10],'\0',1);
可是似乎 '\0' == NULL 所以取出buf時 buf[10]之後的值
都不會出現,想請教是否有其他可以只刪除掉buf[x]
而又其餘部份又可以在Memo中顯示出來的方法呢?
|
Zard
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:24 回覆:396 積分:539 註冊:2003-11-26 發送簡訊給我 |
引言: 目前在操作指標時有一個問題想請各位幫忙. TFileStream* File = new TFileStream(filename,(WORD)fmOpenReadWrite); . . .(略) char *buf=new char[size]; File->ReadBuffer(buf,size); 若要刪除buf中某一些指標中的值要如何刪除呢? 目前已測試 memset(&buf[10],'\0',1); 可是似乎 '\0' == NULL 所以取出buf時 buf[10]之後的值 都不會出現,想請教是否有其他可以只刪除掉buf[x] 而又其餘部份又可以在Memo中顯示出來的方法呢? void __fastcall TForm1::Button1Click(TObject *Sender) { char buf[] = "1234567890"; AnsiString szTmp = buf; ShowMessage(szTmp); // 把buf[2]刪掉 szTmp.Delete(3, 1); ShowMessage(szTmp); } |
yangjack
一般會員 ![]() ![]() 發表:3 回覆:3 積分:1 註冊:2004-10-22 發送簡訊給我 |
引言:引言: 目前在操作指標時有一個問題想請各位幫忙. TFileStream* File = new TFileStream(filename,(WORD)fmOpenReadWrite); . . .(略) char *buf=new char[size]; File->ReadBuffer(buf,size); 若要刪除buf中某一些指標中的值要如何刪除呢? 目前已測試 memset(&buf[10],'\0',1); 可是似乎 '\0' == NULL 所以取出buf時 buf[10]之後的值 都不會出現,想請教是否有其他可以只刪除掉buf[x] 而又其餘部份又可以在Memo中顯示出來的方法呢?void __fastcall TForm1::Button1Click(TObject *Sender) { char buf[] = "1234567890"; AnsiString szTmp = buf; ShowMessage(szTmp); // 把buf[2]刪掉 szTmp.Delete(3, 1); ShowMessage(szTmp); }感謝您的回應.. 因為目前的檔案過大,所以需要利用指標操作 若直接用String來操作,時間需要較多, 因而想找尋可以刪除某部份指標的方法~ |
g6101
高階會員 ![]() ![]() ![]() ![]() 發表:22 回覆:129 積分:110 註冊:2002-06-15 發送簡訊給我 |
yangjack您好:
想要達到您需求那種功能,可能會讓你大失所望,原因在於我們的C語言把'\0'字元視為字串結束符;不過您也不必太過灰心,辦法是人想出來的,以搬移記憶體的方法來實作,同樣可以達到您的需求,以下的程式碼供您做參考:
//字元陣列. char buf[] = "1234567890"; char *p = buf; memmove(p 4,p 5,6);//把陣列第五個字元拿掉 Memo1->Text = p; //檔案. AnsiString FileName = "TEST.TXT";//設檔案內容同為1234567890 TMemoryStream *ms = new TMemoryStream(); ms->LoadFromFile(FileName); char *p = (char *)ms->Memory; memmove(p 4,p 5,5);//把記憶體第五個字元拿掉 ms->SetSize(9);//重新設定大小 ms->SaveToFile(FileName); delete ms;其實說穿了,BCB包裝了各種對字串的插入、刪除等方法,一樣透過這方式來達成的. |
Zard
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:24 回覆:396 積分:539 註冊:2003-11-26 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |