stringstream::seekp在Visual Studio 2015上不起作用



我想从文件中读取一块数据到字符串流中,稍后将用于解析数据(使用getline、>>等(。读取字节后,我设置了字符串流的缓冲区,但我无法设置p指针。我在一些在线服务上测试了代码,比如onlinegdb.com和cppreference.com,它是有效的。然而,在微软上,我遇到了一个错误——指针出了问题。

这是代码,我用char数组替换了读取的文件。

#include <sstream>
#include <iostream>
int main()
{
char* a = new char [30];
for (int i=0;i<30;i++)
a[i]='-';
std::stringstream os;
std::cout << "g " << os.tellg() << " p " << os.tellp() << std::endl;
os.rdbuf()->pubsetbuf(a,30);
os.seekp(7);
std::cout << "g " << os.tellg() << " p " << os.tellp() << std::endl;
}

工作时我得到的输出

g 0 p 0
g 0 p 7

我在视觉工作室2015 上得到的输出

g 0 p 0
g -1 p -1

有ides吗?

感谢

std::sstream::setbuf可能什么都不做:

如果s是空指针,n为零,则此函数无效。

否则,效果是由实现定义的:有些实现什么都不做,而有些实现清除当前用作缓冲区的std::string成员,并开始使用用户提供的大小为n的字符数组作为缓冲区和输入/输出字符序列,该数组的第一个元素由s指向。

最好使用std::stringstream构造函数来设置数据或调用str():

#include <sstream>
#include <iostream>
int main()
{
std::string str( 30, '-' );
std::stringstream os;
std::cout << "g " << os.tellg() << " p " << os.tellp() << std::endl;
os.str( str );
os.seekp(7);
std::cout << "g " << os.tellg() << " p " << os.tellp() << std::endl;
}

相关内容

  • 没有找到相关文章

最新更新