我正在尝试使用函数从文本文件中读取某行以供以后使用,但它似乎没有返回字符串。功能如下:
std::vector<std::string> TextArray(string filePath) {
int arrayNum = 0;
std::vector<std::string> stringArray;
ifstream file (filePath);
std::string str;
while (std::getline(file,str)){
stringArray.push_back(str);
}
return stringArray;//returns an array
}
内部主要:
std::vector<std::string> fileString = TextArray("c:/computerAi/saved");
std::cout << fileString[1] << std::endl;
我收到错误消息“向量下标超出范围”
答案 0 :(得分:0)
我怀疑路径可能是问题所在。 "c:/computerAi/saved"
不是有效路径。它应该是"C:\\computerAi\\saved"
。双反斜杠是必要的,因为反斜杠是C / C ++中的转义字符。如果文件流无法打开,则向量可能为空。另外,我假设C:\computerAi\saved
实际上是一个文件而不是目录。
另外,正如注释中提到的bvj,下标1是向量中的第二个元素,而不是第一个元素。因此,如果您想要第一个元素,请尝试fileString[0]
而不是fileString[1]
。
编辑:我仍然怀疑路径是问题所在。以下程序适合我:
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
std::vector<std::string> TextArray(std::string filePath)
{
int arrayNum = 0;
std::vector<std::string> stringArray;
std::ifstream file(filePath.c_str());
std::string str;
while (std::getline(file,str))
{
stringArray.push_back(str);
}
return stringArray;//returns an array
}
int _tmain(int argc, _TCHAR* argv[])
{
std::vector<std::string> fileString = TextArray("c:\\temp\\testing.txt");
std::cout << fileString[1] << std::endl;
return 0;
}
当我使用无效路径(一个不存在的文件)尝试此程序时,我得到了问题所描述的确切行为。当我使用有效路径尝试它时,它返回输入文件的第二行,与预期完全一样。