0

写入 char * 数组是否有等效于 fwrite 的方法?我尝试了 stringstream,但它似乎并没有完全一样。我可以使用 memcpy,但我忘记了计数...

澄清要写入的数据可能包含 nul。我想要

write(array, &someint, 4);
write(array, &bunchofdata, sizeof(bunchofdata));
write(array, somestring, somestring.length());

并不断增加偏移量。

4

2 回答 2

2

创建写入固定大小缓冲区的流缓冲区非常容易。一旦你有了一个流缓冲区,你就可以在为它构造一个流缓冲区之后使用正常的流操作来写入std::ostream它。例如:

struct membuf
    : std::streambuf
{
    membuf(char* base, std::size_t size) { this->setp(base, base + size); }
    char* end() { return this->pptr(); }
};

int main()
{
    char         buffer[12345];
    membuf       sbuf(buffer, sizeof(buffer);
    std::ostream out(&sbuf);
    out << "hello, world\n";
    std::cout << "wrote " << (sbuf.end() - buffer) << " bytes\n";
}

显然,您也可以使用未格式化的流操作。

于 2013-09-06T21:40:28.650 回答
0

如果您想显式传递大小和计数,您可以在 memcpy 周围创建一个轻量级包装器(内联函数或宏),以保持与 fwrite 相同的参数。

#define memwrite(buffer, size, count, destination) \
    memcpy(destination, buffer, (size) * (count))
于 2013-09-06T21:41:02.980 回答