C++ 我将stringstream与我自己的缓冲区一起使用,但是它的str()方法没有';与我的缓冲区无关?

C++ 我将stringstream与我自己的缓冲区一起使用,但是它的str()方法没有';与我的缓冲区无关?,c++,stringstream,C++,Stringstream,我想为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::flus

我想为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;
我将缓冲区设置为“efgh”后,ss.str()不会显示新内容,这是为什么

我想直接设置内部缓冲区的原因是,它应该是一个类似recv的系统调用。


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

ss是与“buffer”不同的对象,它不是指向“buffer”的指针。 当您执行“pubstebuf”时,您将缓冲区的内容复制到“ss”中。
您可能想尝试使用“ssI已经在这个站点上查找了一些帖子,调用ss.rdbuf()->pubstebuf()是将现有缓冲区设置为stringstream的一种常见方法。您说不是。现在我真的很困惑:)”将现有缓冲区设置为stringstream“意味着它会将内容复制到stringstream中,您需要在更改缓冲区后再次调用该函数。由于此函数是复制数据,是否比简单使用运算符效率低?这不是我的意思,两者都会复制内容。stringstream没有指向外部缓冲区的指针,无法通过更改其他缓冲区来操作。我已经编辑了文章。在我的例子中,我想直接设置缓冲区。我想让这个ss对象意识到这一点。可能是
abcd