在 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::string
的std::array
(或者可能是std::vector
)并直接读入字符串。
【讨论】:
以上是关于在 C++ 中获取多个输入文件并将其保存在数组中的主要内容,如果未能解决你的问题,请参考以下文章
如果我想修改声音文件并将其保存回来,我应该寻找哪些 C++ 库? [关闭]