我的代码打开一个文本文件,计算行数,分配一个数组来存储所有行,然后调用一个函数来填充每行的数组。此功能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(...))'。 (这似乎是最近出乎意料地突然出现) –