我想使用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。
答案 0 :(得分:3)
您使array
的 all 指针指向同一位置:str
的第一个字符。
有两种解决方法:
array
设为直接读入的数组的数组std::array
的std::vector
(或可能的std::string
)并直接读入字符串。