我正在编写一个c ++程序.我正在解析一个文件并初始化一个结构.我有一个数组要初始化,但我必须从文件中读取数组的大小.我想在一个函数中读取数组长度和数组初始化.如果我将数组指针传递给另一个函数并执行一个新函数,当函数返回时,指针将被销毁,我无法看到初始值.这是预期还是我错过了什么.我怎样才能克服这个问题?
你通过忘记关于手动数组,原始指针传递*和的一切来克服这一点new.这是C++,而不是1991年.因此,一个典型的解决方案可能是:
#include <vector>
#include <cstdint>
#include <istream>
std::vector<uint32_t> read_data(std::istream & is)
{
uint32_t len;
is.read(reinterpret_cast<char*>(&len), sizeof(uint32_t));
std::vector<uint32_t> result(len);
for (uint32_t i = 0; i != len; ++i)
{
is.read(reinterpret_cast<char*>(&result[i]), sizeof(uint32_t));
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
(在高质量的代码中,read命令将被条件包围,并且可能会通过抛出异常来处理错误.)
后来:
#include "int_reader.hpp"
#include <fstream>
#include <iostream>
int main()
{
std::ifstream infile("thedata.bin", std::ios::binary);
std::vector<uint32_t> data = read_data(infile);
std::cout << "We read " << data.size() << " integers.\n";
}
Run Code Online (Sandbox Code Playgroud)
*)在通用C++中具有位置的唯一原始指针是char*用于I/O操作时,如此代码所示.C++定义char为机器的基本数据单元类型,I/O以单位形式发生char.