所以目前我正在进行一项任务,对于其中的一部分,我需要能够将.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++,但在某个地方长期困惑。
提前感谢您提供的任何帮助。
答案 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