ifstream getline问题

Tsa*_*ras 1 c++ getline ifstream

我的代码打开一个文本文件,计算行数,分配一个数组来存储所有行,然后调用一个函数来用每行填充这个数组.此函数file.getline调用返回空字符串:

这是代码:

typedef char* line;
Run Code Online (Sandbox Code Playgroud)

...

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);
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

这工作正常.然而,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;
}
Run Code Online (Sandbox Code Playgroud)

我觉得它与getline的'\n'问题有关,但是当我将get指针设置为0并且文件以普通文本开头而不是一行时,我无法理解为什么它填充templine与空字符串.

Tin*_*sen 5

您不需要先计算行然后读取行.你可以做

#include <istream>
#include <vector>
#include <string>

std::vector<std::string> ReadLines(std::istream& is) {
    std::vector<std::string> lines;
    std::string line;

    while (std::getline(is, line)) {
        lines.push_back(line);
    }

    return lines;
}
Run Code Online (Sandbox Code Playgroud)

这将返回带有所有行的std :: vector,而不需要任何大惊小怪或手动内存管理.