在 C++ 中获取多个输入文件并将其保存在数组中

Posted

技术标签:

【中文标题】在 C++ 中获取多个输入文件并将其保存在数组中【英文标题】:Getting multiple input files in C++ and saving it in an array 【发布时间】:2019-04-29 15:04:27 【问题描述】:

我想使用 ifstream 获取多个 txt 文件的输入并将其存储在 char* 数组或向量中。 我有几个名为 test1.txt、test2.txt、test3.txt 的测试文件... 所以我使用了一个for循环并将文件路径(字符串)设置为“test”+to_string(i)+“.txt” 当我使用 get line 或 >> 从该文本文件中获取输入字符串并打印它以进行测试时,文本会在 for 循环内正确打印。我使用如下语句将字符串保存到数组中 “数组[i-1]=str;”

然后当我在 for 循环之外打印数组时,输出都是相同的——它打印最后一个测试文件的字符串。我想知道为什么会这样。

我尝试将数组更改为向量,但效果相同。如果我不使用 for 循环并设置每个 filePath 和 string 变量,它可以正常工作,但我认为对于 10 多个案例来说这不是一个好方法。

int main()  
 char* array[10];
 char str[100]; //it is for the sample cases I randomly made which does  not exceeds 99 chars 

 for(int i=1; i<10; i++)
        string filePath = "Test" + to_string(i) + ".txt";
        ifstream openFile(filePath.data());
        if(openFile.is_open())
           openFile >> str;
           array[i-1] = str;
           cout << array[i-1] << endl; 
           openFile.close();
         


cout << array[0] << endl;
cout << array[5] << endl;
cout << array[6] << endl;
//then if I print it here the outputs are all same: string from Test10.

例如,如果 test1.txt = "a", test2.txt = "b" ... test9.txt="i", test10.txt="j"

在 for 循环中它被正确打印 => a b c d ... j。 但是在for循环之外,输出都是j。

【问题讨论】:

另外,如果你有std::to_string,那么你的std::ifstream 构造函数也可以将std::string 作为文件名的参数。它们都是同时引入的(使用 C++11 标准)。 【参考方案1】:

你让array所有指针指向同一个地方:str的第一个字符。

有几种方法可以解决这个问题:

使array 成为您直接读入的数组数组 为您读取的每个字符串动态分配新内存,并将字符串复制到其中 其他一些... 或者我推荐的解决方案:使用std::stringstd::array(或者可能是std::vector)并直接读入字符串。

【讨论】:

以上是关于在 C++ 中获取多个输入文件并将其保存在数组中的主要内容,如果未能解决你的问题,请参考以下文章

如果我想修改声音文件并将其保存回来,我应该寻找哪些 C++ 库? [关闭]

C# 记录麦克风输入并将其存储在字节数组中,而不是本地存储

如何获得30秒的多个用户输入并将其保存到列表中?

如何将数据库中的数据提取到 javascript 文件中并将其存储在数组中?

如何在 C++ 中将文本文件输入转换为数组

获取用户输入并将其存储到指针数组