我想将自己的缓冲区用于字符串流,但更改缓冲区两次不会产生两个输出,就像下面显示的代码一样。
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完全更改缓冲区,它根本不会改变,保留以前的内容。
答案 0 :(得分:0)
ss是一个与“缓冲区”不同的对象,它不是指向“缓冲区”的指针。 当你执行“pubsetbuf”时,你将缓冲区的内容复制到“ss”中。 你可能想尝试使用“ss&lt;&lt; buffer”,但它会更容易。