我的代碼打開一個文本文件,計算行數,分配一個數組來存儲所有行,然後調用一個函數來填充每行的數組。此功能file.getline調用返回空字符串:ifstream getline問題
下面的代碼:
typedef char* line;
...
char* filename=new char[256];
cout << "Type a file name: " << endl;
cin.ignore();
cin.getline(filename,255);
ifstream iFile(filename);
int nLines=CountLines(iFile);
line* LineArray = new line[nLines];
ReadLines(LineArray,iFile);
了countLines功能:
int CountLines(ifstream &file)
{
line templine=new char[64];
int nLines=0;
while (!file.eof())
{
file.getline(templine,64);
if (*templine != '\n')
nLines++;
}
delete [] templine;
return nLines;
}
這正常工作。然而readlines方法並不:
void ReadLines(line* LineArray, ifstream &file)
{
line templine=new char[64];
file.seekg(0,ios::beg);
int i = 0;
while (!file.eof())
{
if (*templine != '\n')
{
LineArray[i]=templine;
i++;
}
}
delete [] templine;
}
我有一種感覺,它是與函數getline的「\ n」的問題,但我取指針設置爲0,該文件對普通的文字,而不是一開始行,我不明白爲什麼它填充空字符串templine。
使用['標準:: VECTOR'(http://en.cppreference.com/w/cpp/container/矢量)和['std :: string'](http://en.cppreference.com/w/cpp/string/basic_string),它會讓你的生活變得更容易。另外,你有很多潛在的內存泄漏。 –
'LineArray [i] = templine;'你在哪裏積累'我'? – xiaoyi
不要使用'while(!file.eof())'!它檢查* previous * read是否是文件的結尾。你想'while(file.getline(...))'。 (這似乎是最近出乎意料地突然出現) –