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

问题描述 投票:0回答:1

我想使用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。

c++ file-io
1个回答
3
投票

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

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

  • 使array成为您直接读入的数组数组
  • 为您读取的每个字符串动态分配新内存,并将字符串复制到其中
  • 其他几个......
  • 或者我推荐的解决方案:使用std::array(或可能是std::vector)的std::string并直接读入字符串。
© www.soinside.com 2019 - 2024. All rights reserved.