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

Posted

技术标签:

【中文标题】程序未从文本文件 c++ 中打印出字符串【英文标题】:Program not printing out string from text file c++ 【发布时间】:2014-11-17 04:29:05 【问题描述】:

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

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;

我收到一条错误消息,提示“向量下标超出范围”

【问题讨论】:

改用 fileString[0]。 当您使用调试器单步执行程序时,push_back us 行执行了多少次? 您确定c:/computerAi/saved 将始终包含至少两行吗?就像您试图引用 fileString[1] 一样,它可以是空的。 【参考方案1】:

我怀疑路径可能是问题所在。 "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;

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

【讨论】:

注意:/ 在路径中有效,但以小写“c”开头的路径是可疑的。 C:\computerAi 是一个目录 谢谢我放学后试试这个!

以上是关于程序未从文本文件 c++ 中打印出字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何在文本文件中搜索单词,如果找到则打印出整行

为啥以文本形式打开图像文件会打印出奇怪的字符?

如果字符串在文本文件中,如何在 Python 中检查并打印该行?

C++ 奇怪的文件输出

C++:从文件/用户名和密码读取

在 C 中,我应该如何读取文本文件并打印所有字符串