将文本文件读入char数组,然后读入char链接列表

时间:2016-05-05 08:38:39

标签: c++ arrays linked-list char

所以目前我正在进行一项任务,对于其中的一部分,我需要能够将.txt文件读入类型为char的链接列表中。我在尝试这样做时已经很困惑了,所以我开始了另一条路径并决定尝试将文件中的文本复制到char数组中,然后逐个将数组中的值复制到链表。

到目前为止,我收到错误Segmentation fault (core dumped)之前,我的程序正在编译并运行到某一点。

阅读文件的代码如下:

void readFile(list<char> &originList, string fileName){
    ifstream fileInput;
    fileInput.open(fileName.c_str());

    int arraySize = fileInput.gcount();
    char tempHold[arraySize];

    if (!fileInput) {
        cout << "Can't open file: " << fileName << "\n";
    } else {
        string contents((istreambuf_iterator<char>(fileInput)), istreambuf_iterator<char>());
        strcpy (tempHold, contents.c_str());

        for (int x = 0; x < fileInput.gcount(); x++) {
            originList.push_back(tempHold[x]);
        }

   }

   fileInput.close();
}

另外要添加一些上下文,使用cout我确定代码在以下时间点停止运行,而不是出现错误:

strcpy (tempHold, contents.data());

另外,我不是百分之百关于他们究竟是如何工作的,只是说实话是一个宽松的想法。我主要从Stack Overflow问题中找到了这个想法, How to copy a .txt file to a char array in c++,但在某个地方长期困惑。

提前感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:1)

istream::gcount返回在对象上执行的上一次无格式输入操作提取的字符数。由于您没有从文件中读取任何内容,因此您应该出错。

在致电istream.getline();

之前,请致电gcount()

答案 1 :(得分:0)

就像我对你的问题的评论所说,从文件中读取每个字符并将其添加到列表中。

void readFile(list<char> &originList, string fileName) {
    ifstream fileInput(fileName.c_str());

    if (!fileInput) {
        cout << "Can't open file: " << fileName << "\n";
    }

    char c;
    while (fileInput.get(c)) {
        originList.push_back(c);
    }

}
  

注意: while (fileInput.get(c))这会读取字符并返回流。当流用作bool值时,它会检查流是否有效。有效方式eof()bad()均为false。 - 从comment到下面链接问题的答案。

我的答案改编自其他Stack Overflow问题:Reading from text file until EOF repeats last line