ifstream,Getline返回一个内存地址

时间:2015-08-21 17:57:59

标签: c++ string file pointers

我有以下代码:

std::ifstream report( fileToRead );
cout << "leyendo archivo: " << fileToRead << endl;
std::string line;
cout << std::getline(report,line) << endl;
report.close();

但是cout给出了以下结果:0x28fe64我该怎么办?

1 个答案:

答案 0 :(得分:4)

基于此参考,http://www.cplusplus.com/reference/string/string/getline/

getline函数返回对ifstream对象的引用,这就是您打印地址的原因。

您需要cout << line;才能打印出阅读的内容。

我也没有重复你的bug,你正在使用哪个版本的g ++和OS?我的g ++如下:

  

配置:   --prefix = / Applications / Xcode.app / Contents / Developer / usr --with-gxx-include-dir = / usr / include / c ++ / 4.2.1 Apple LLVM 6.1.0版(clang-602.0.53)(基于LLVM 3.6.0svn)目标:   x86_64-apple-darwin14.3.0线程模型:posix

#include <fstream>
#include <iostream>
using namespace std;

int main(int argc, char * argv[]){
    char * fileToRead= "a.txt";
    std::ifstream report( fileToRead );
    cout << report << endl;

    cout << "leyendo archivo: " << fileToRead << endl;
    std::string line;
    cout << std::getline(report,line) << endl;
    cout << std::getline(report,line) << endl;
    cout << std::getline(report,line) << endl;
    cout << std::getline(report,line) << endl;
    cout << std::getline(report,line) << endl;
    cout << std::getline(report,line) << endl;
    report.close();
}

我得到的结果是:

1
leyendo archivo: a.txt
1
1
1
0
0
0

似乎ifstream被转换为boolean变量,指示ifstream是否存在任何文件操作错误。最后的三个零是由于没有更多的线要读。