2011-06-23 118 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