从 istringstream 末尾查找失败
这是一个极简代码:
#include <string>
#include <sstream>
#include <iostream>
int main ()
{
std::string str = "spam" ;
std::istringstream isz( str ) ;
isz.seekg( 1,std::ios_base::beg ) ; std::cout << isz.fail() ;
isz.seekg( 1,std::ios_base::cur ) ; std::cout << isz.fail() ;
isz.seekg( 1,std::ios_base::end ) ; std::cout << isz.fail() ;
return 0 ;
}
我得到 001
意味着最后一个 seekg
失败。
我对 linux/g++ 和 win/MSVC 也是如此。
我在 C++/stl 文档中找不到这样的限制...
有什么想法吗?
谢谢
Here is a minimalist code :
#include <string>
#include <sstream>
#include <iostream>
int main ()
{
std::string str = "spam" ;
std::istringstream isz( str ) ;
isz.seekg( 1,std::ios_base::beg ) ; std::cout << isz.fail() ;
isz.seekg( 1,std::ios_base::cur ) ; std::cout << isz.fail() ;
isz.seekg( 1,std::ios_base::end ) ; std::cout << isz.fail() ;
return 0 ;
}
I get 001
meaning the last seekg
failed.
I the same with linux/g++ and win/MSVC.
I can't find such limitation in C++/stl documentation...
Any idea ?
Thx
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
抱歉,我错过了一点:
当我调用
seekg( 1,std::ios_base::end )
时,我尝试在结束后执行 1 char(这会失败)。我必须调用
seekg( -1,std::ios_base::end )
来在结束之前移动 1 个字符。Sorry, I missed a point :
When I call
seekg( 1,std::ios_base::end )
, I try go 1 char after the end (which fails as it should).I have to call
seekg( -1,std::ios_base::end )
to go 1 char before the end.