从 istringstream 末尾查找失败

发布于 2025-01-10 05:02:27 字数 619 浏览 1 评论 0原文

这是一个极简代码:

#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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

泅人 2025-01-17 05:02:27

抱歉,我错过了一点:
当我调用 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文