我使用stringstream和我自己的缓冲区,但它的str()方法与我的缓冲区无关?

时间:2014-03-06 08:33:39

标签: c++ stringstream

我想将自己的缓冲区用于字符串流,但更改缓冲区两次不会产生两个输出,就像下面显示的代码一样。

std::stringstream ss;
char buffer[10];
memset(buffer, '\0', sizeof buffer);

ss.rdbuf()->pubsetbuf(buffer, sizeof buffer);
sprintf(buffer, "abcd");
std::cout << ss.str() << std::flush;

ss.rdbuf()->pubsetbuf(buffer, sizeof buffer);
sprintf(buffer, "efgh");
std::cout << ss.str() << std::flush;

结果是:

abcd

在我将缓冲区设置为“efgh”之后,ss.str()没有向我显示新内容,为什么会这样?

我想直接设置内部缓冲区的原因是它应该像recv一样进行系统调用。

现在我发现了这个事件,如果我在第二次调用中使用pubsetbuf完全更改缓冲区,它根本不会改变,保留以前的内容。

1 个答案:

答案 0 :(得分:0)

ss是一个与“缓冲区”不同的对象,它不是指向“缓冲区”的指针。 当你执行“pubsetbuf”时,你将缓冲区的内容复制到“ss”中。 你可能想尝试使用“ss&lt;&lt; buffer”,但它会更容易。