我想使用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。
你让array
的所有指针指向同一个地方:str
的第一个字符。
有几种方法可以解决这个问题:
array
成为您直接读入的数组数组std::array
(或可能是std::vector
)的std::string
并直接读入字符串。