2011-12-19 80 views
0

我不太明白这个函数是如何工作的。C++ getline()函数

我写了一个简单的程序,用getline()读一行。

例如:

ifstream in; 
in.open("example.txt"); 
string line; 
getline(in, line); 
cout << line << endl; 

当我试图运行此程序我收到错误讯息这样。

`assign1_2.cpp:33:20: error: cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*' for argument '1' to 'int atoi(const char*)' 

我简直不明白这里出了什么问题。请帮忙!。我是C++的新手。

+3

莫非你向我们展示整个程序,错误不在那里。你在哪里叫'atoi'? – Drahakar 2011-12-19 14:18:31

+2

它看起来不像是错误消息与你发布的代码有关(它抱怨将'std :: string'传递给'atoi()'而不是一个指向'char'的常量指针)。这段代码是否真的在第33行的'assign1_2.cpp'中? – 2011-12-19 14:18:44

+0

出于好奇,你使用了什么编译器?我认为'std :: string'类型被作为'std :: string {aka std :: basic_string }'给出的事实是非常整洁的! – 2011-12-19 14:19:55

回答

5

您没有显示错误代码,但错误表示您尝试使用std::string类型的参数调用atoiatoi需要一个C字符串(man atoi),所以你需要调用它像:

atoi(line.c_str()); 
+0

抱歉关于信息不足。该文本文件包含以下文本。 assign1_2.cpp:33:20:错误:不能转换 '的std :: string {又名的std :: basic_string的}' 到 '常量字符*' 的参数 '1' 到“INT的atoi(常量字符*)' 我试着用GCC进行编译。 然而,我并没有尝试在这里使用atoi。 – user1047092 2011-12-19 14:27:09

0

你想调用哪个函数? gnu'C'getline函数或istream :: getline?

的IStream ::函数getline具有以下特征

istream& istream::getline(char* str, streamsize count) 
istream& istream::getline(char* str, streamsize count, char delim) 

所以,你叫应该是这样的:

char* buf[1000] 
in.getline(buf, 1000); 
+0

谢谢,但我想使用C我猜.. – user1047092 2011-12-19 14:34:45

0

变化string linechar line[2000] 像这样:

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


int main() 
{ 
    char line[2000]; 
    fstream in; 

    in.open("example.txt",ios::in); 

    while(!in.eof()) 
    { 
      in.getline(line,2000); 
    } 

    in.close(); 
    cout <<line; 
    cout <<endl; 

    return 0; 
}