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

时间:2019-04-29 15:04:28

标签: c++ file-io

我想使用ifstream获得多个txt文件的输入并将其存储在char *数组或向量中。 我有几个名为test1.txt,test2.txt,test3.txt的测试文件... 因此,我使用了for循环并将文件路径(字符串)设置为“ test” + to_string(i)+“。txt” 当我使用get line或>>从该文本文件中获得输入字符串并打印以进行测试时,该文本将正确打印在for循环内。我通过使用类似的语句将字符串保存到数组中 “ array [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。

1 个答案:

答案 0 :(得分:3)

您使array all 指针指向同一位置:str的第一个字符。

有两种解决方法:

  • array设为直接读入的数组的数组
  • 为读取的每个字符串动态分配新的内存,并将字符串复制到其中
  • 其他几个...
  • 或我建议的解决方案:使用std::arraystd::vector(或可能的std::string)并直接读入字符串。