2011-06-23 158 views
0

我想從文件中讀取RAD Studio 2010中的無符號字符數組,我有一個例子,但我需要讀取文件的數組大小。對不起我的英文從文件讀取數組C++

void __fastcall TForm1::ChooseFileClick(TObject *Sender) 
{ 
    TOpenDialog *od = new TOpenDialog(this); 
    if (od->Execute()) { 
    TFileStream *fs = new TFileStream(od->FileName,fmOpenRead); 
    fs->Position = soFromBeginning; 
    TMemo *m = new TMemo(this); 
    m->Parent = this; 
    m->Lines->LoadFromStream(fs); 
    delete fs; 
    fs = NULL; 
    } 
    delete od; 
    od = NULL; 
} 
+0

如果你能解釋這個代碼有什麼問題,這將是有幫助的。 - Falls du Deutsch sprichst(vermute ich anhand deines Namens einfach mal):eswäreschonnötigdass du ein bischen das Problem beschreibst。 Es wird hier sicherlich nicht gern gesehen,aber auch wenn du nicht auf englisch schreibstnütztes was。 – leftaroundabout

+0

Nur wenn Sie das uebersetzen :) @leftaroundabout – sehe

+0

這裏我寫文件到TMemo,但是我想把它寫到數組 – 29ru

回答

0

雖然我不確定你的確切意圖,但我可以告訴你:不要使用原始數組!

在C++中,我們有vector類型。一個向量與一個數組非常相似,但是您可以繼續添加元素。如果它變滿了,它會變得更大。 (實際上,矢量只是數組的一個包裝,當它被填滿時,它會創建一個更大的數組,將該元素複製到新數組,然後丟棄原始數組)。

使用vector,你的代碼如下這種風格:

#include <vector> // so we can actually use vectors 

... // program code here 

// here's a basic loop which fills a vectors with the numbers 1 to 99. 
std::vector<unsigned char> myVec; 
while(there_is_stuff_to_read) 
{ 
    myVec.push_back(get_next_element()); 
} 

當然,循環會涉及到你使用任何文件閱讀課。關鍵是push_back方法,它向向量添加元素。

如果您的代碼的其他部分上使用無符號字符的陣列特別依賴,則可以填充該載體,以及使用根據需要這行代碼:

unsigned char * arr = &myVec[0]; 

然後可以使用arr作爲你通常的無符號字符數組。只需確保在向矢量添加更多元素之後不要掛在這個指針上。不保證它是一個有效的指向矢量內部數組開始的指針(因爲矢量重新分配其內部數組)。

上一行代碼不會創建一個全新的數組。如果你想要的向量的內部內容的正版,您可以使用類似:

unsigned char * arr = new unsigned char[myVec.size()]; 
std::copy(myVec.begin(), myVec.end(), arr); 

只要確保你包括標準<算法>頭。

+0

感謝您的想法我會嘗試 – 29ru