C++标准库处理字符流时getline的一个坑

一、描述

如果字符流最后没有一个空白行,那么getline处理最后一行的数据时,seekg会失效

二、代码测试

#include <sstream>
#include <iostream>

using namespace std;

int main(int argc, char** argv)
{
    const char* cs = "line1\nline2\nline3";

    stringstream ss(cs);

    for (int i = 0; i < 2; ++i)
    {
        streamoff pos = ss.tellg();
        string s;
        getline(ss, s);
        cout << s << endl;
        cout << "**" << endl;
        cout << pos << endl;
    }

    cout << endl << "------------------------------------------" << endl << endl;

    for (int i = 0; i < 2; ++i)
    {
        streamoff pos = ss.tellg();
        string s;
        getline(ss, s);
        cout << s << endl;
        cout << "$$" << endl;
        cout << pos << endl;
        ss.seekg(pos, ios::beg);
    }

    return 0;
}

代码在linux上,g++ 4.1.2 上显示有问题

时间: 2024-12-18 23:14:08

C++标准库处理字符流时getline的一个坑的相关文章

使用c++11标准库转换字符编码

转自:http://www.cnblogs.com/LinuxHunter/archive/2013/01/06/2848293.html #include <stdio.h> #include <locale> #include <codecvt> const std::string ws2s( const std::wstring& src ) { std::locale sys_locale(""); const wchar_t* da

python标准库之字符编码详解

codesc官方地址:https://docs.python.org/2/library/codecs.html 相关帮助:http://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html #python标准库(英文地址:)http://www.ask3.cn/ebook/docspy3zh/library/index.html unicode入门: cpython2.xz支持2种类型字符串处理文本数据,老式的str实例使用单个8位字节表示字

mysql授权新的用户时遇到的一个坑

其实自己就是没有搞懂 select * from mysql.db\G 和 select * from mysql.user\G 区别:后者是对所有库的权限,前者如果要查询单个库的权限可以使用前者! 下面贴两个图就能明白了:

使用SpringBoot的yml文件配置时踩的一个坑

问题描述:使用SpringBoot整合redis进行yml配置的时候,启动工程报错,提示加载application.yml配置文件失败: 17:18:27.430 [main] ERROR org.springframework.boot.SpringApplication - Application startup failed java.lang.IllegalStateException: Failed to load property source from location 'clas

【凯子哥带你夯实应用层】使用ActionProvider实现子菜单时遇到的一个坑

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 最近在重温Android基础,在看到ActionProvider的时候遇到一个坑,分享到大家,避免入坑. 首先简单介绍下ActionProvider. ShareActionProvider你应该用过吧?就是使用系统自带的分享功能,其实ShareActionProvider就是ActionProvider的一个子类,可以在ActionBar上面显示为一个MenuItem,但是我们可以自定义事件行为,所以我

安装cdh时启动spark一个坑

1.cdh在spark的conf中没有slaves文件解决方法:在spark的conf目录下添加slaves文件,内容为worker节点名2.yarn的端口和spark的worker端口冲突都是7337,导致worker进程不能正常工作解决办法:在spark的conf目录下修改spark-default.conf文件,把里面的7337端口改成其他的端口 原文地址:http://blog.51cto.com/quliren/2324417

Python标准库06 子进程 (subprocess包)

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 谢谢Tolbkni Kao帮我纠正错误 这里的内容以Linux进程基础和Linux文本流为基础.subprocess包主要功能是执行外部的命令和程序.比如说,我需要使用wget下载文件.我在Python中调用wget程序.从这个意义上来说,subprocess的功能与shell类似. subprocess以及常用的封装函数 当我们运行python的时候,我们都是在创建并运行一个进

字符流总结--Day21

转换流出现的原因及思想由于字节流操作中文不是特别方便,所以,java就提供了转换流(InputStreamReader,OutputStreamWriter).OutputStreamWriter:是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节.InputStreamReader:是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符.把字节流转换为字符流.字符流=字节流+编码表. 究竟什么时候采用字节流,什么时候采用字符流?能够用

Java核心知识点-字节流和字符流详解

字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 区别:实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件,如图12-6所示. 下面以两个写文件的操作为主进行比较,但是在操作时字节流和字符流的操作完成之后都不关闭输出流. 范例:使用字节流不关闭执行 Java代码   package org.lxh.demo12.byteiodemo; import java.io.File; import