繁体   English   中英

从文件读取到数组C ++

[英]read from file to array C++

我想在RAD Studio 2010中从文件读取未签名的字符数组,我有一个例子,但是我需要读取文件的数组大小。 对不起我的英语

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;
}

尽管我不确定您的确切意图,但我可以告诉您:不要使用原始数组!

在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用作常规的无符号char数组。 只需确保在向向量添加更多元素后不要挂在此指针上即可。 不能保证保持有效的指针指向向量的内部数组的开始(因为向量重新分配了其内部数组)。

上一行代码不会创建一个全新的数组。 如果您想要向量内部内容的真实副本,则可以使用以下方法:

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

只要确保您包括标准的<algorithm>标头即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM