程序不从文本文件c ++中打印出字符串

时间:2014-11-17 04:29:06

标签: c++ string function

我正在尝试使用函数从文本文件中读取某行以供以后使用,但它似乎没有返回字符串。功能如下:

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;

我收到错误消息“向量下标超出范围”

1 个答案:

答案 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;
}

当我使用无效路径(一个不存在的文件)尝试此程序时,我得到了问题所描述的确切行为。当我使用有效路径尝试它时,它返回输入文件的第二行,与预期完全一样。