wjj1991
wjj1991
2016-03-04 17:29
采纳率: 0%
浏览 1.8k

c++ ifstream read 与 getline 方法获取到的结果不一样

同一个文件,不同方法结果不一样

第1种写法:

  std::ifstream in("midfile.mid");

  in.seekg(0,std::ios::end);
    const int length = in.tellg();
    char* buffer = new char[length];

    in.read(buffer, length);
    in.close();
    std::cout << std::hex << buffer[0];
    delete buffer;

断点显示buffer[0] -51

第2种写法:

std::ifstream in("midfile.mid");

char buffer[256];
while (!in.eof())
{
    in.getline(buffer, 100);
    std::cout << std::hex <<buffer[0];
    break;
}
in.close();

断点显示buffer[0] 77

求问,getline 与 read 有什么不同么?怎么让read到的与getline的结果一样?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • caozhy

    const int length = in.tellg();
    返回的不是长度,而是当前文件指针的位置

    点赞 评论
  • WinsenJiansbomber
    Jimbo 2016-03-05 04:47

    in.seekg(0,std::ios::end);都把内部指针指向文件结束点了,再read能取出什么内容呢?

    seekp 和 tellp ,seekg and tellg ,后缀p代表put输出,后缀g代表get是输入,对应两套文件IO方法,内部管理了一个指向当前位置的指针,通过seek来改变指针的位。

    如果想通过 tellp 、tellg来间接获取文件长度,需要文件开始处的指针值和结束处的指针值,两个值的差值就表示内存中的字节数。

    点赞 评论
  • wjj1991
    wjj1991 2016-03-05 06:09
    std::ifstream in("midfile.mid");
    
    in.seekg(0,std::ios::end);
        in.seekg(0,std::beg);//加上这句就正常了
    const int length = in.tellg();
    char* buffer = new char[length];
    
    in.read(buffer, length);
    in.close();
    std::cout << std::hex << buffer[0];
    delete buffer;
    
    
    
    点赞 评论

相关推荐