3

我正在尝试将文件内容复制到缓冲区。

std::ifstream fp(myFile, std::ios::binary)
fp.seekg(0, fp.end); // set cursor at the end
int length = fp.tellg(); // get data size
fp.seekg(0, fp.beg); // go back to buffer begin

char data[1000];
if(length<1000) {
    memcpy(data, fp.rdbuf(), length); // This crash

    std::stringstream contents;
    contents << fp.rdbuf();
    memcpy(data, contents->str().c_str(), length); // works fine
}

使用 rdbuf 复制直接崩溃,但在 stringstream 上复制然后在缓冲区中工作正常。

有人有解释吗?

4

2 回答 2

4

这是因为该rdbuf函数实际上并不返回数据,而是返回一个流缓冲区实例。输入运算符<<被重载以处理此对象实例,但memcpy不知道如何处理它。

于 2013-11-08T09:52:17.030 回答
2

rdbuf()不返回可以使用 memcpy 的缓冲区,它返回一个streambuf对象。

于 2013-11-08T09:52:28.140 回答