2011-12-19 139 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; 
}