c ++函数返回空向量,尽管它是pass-by-reference

时间:2016-11-17 19:41:10

标签: c++ vector pass-by-reference readfile

我试图在c ++中将文件的二进制文件读入vector<char>,但读取函数似乎表现得像传值,即使它不是。

这是我的简化代码:

#define sz 4096
int main(){
     string filename="a/file/path";
     vector<char> block_hex;
     read_Xbytes(filename, 0, sz, block_hex);
     cout << "\nnum bytes: " << block_hex.size() << " size: " << sz << endl;
}

void read_Xbytes(string fpath, int pos, int Xbytes, vector<char>& bytes) {
    ifstream is;
    is.open(fpath, ios::binary);
    is.ignore(pos);
    if (Xbytes > 0) {
        bytes.reserve(Xbytes);
        is.read((char*)&bytes[0], Xbytes);
    }
    is.close();
    for (int i = 0; i < 16; i++)
        cout << hex(bytes[i]) << " ";
    cout << endl;
}

hex函数正在打印每个字节的十六进制值。在功能内部,它完美地工作;我查看了一个十六进制编辑器HxD,没有问题。但是,在main中,它打印出 num字节:0大小:4096

我尝试将功能更改为vector<char> read_Xbytes(string fpath, int pos, int Xbytes),结果仍然相同。

我想知道为什么函数的行为类似于传值?我真的找不到任何有用的东西。

我正在使用Windows 7和Visual Studio 2015.

0 个答案:

没有答案