c++ - 使用 C++,为什么我会收到错误消息 "string subscript out of range"而我知道它不是?或者至少看起来是这样

标签 c++ string char fstream outofrangeexception

编辑 - 没有空行。 编辑 2 - 我的错,看来我一直都错了。某处有一个空行,尽管 csv 文件另有说明。它现在正在工作。 好的,这是整个(简短的)程序:

#include <iostream>
#include <cctype>
#include <string>
#include <fstream>
using namespace std;

int main(){
    char a;
    string stringmanip;

    fstream myfile("readthisfile.csv");
    if (myfile.is_open()){
        while ( myfile.good() ){
            getline(myfile,stringmanip);
            a=stringmanip[0];
        }
        myfile.close();
    }
    else cout<< "Unable to open file";

    return 0;
}

这对我来说毫无意义。我可以复制 stringmanip,我可以 cout stringmanip,我可以将 .substr 与 stringmanip 一起使用。如果我定义一个常规字符串,我可以很好地使用 [] 操作。我也尝试过 .at,但这只会导致另一个错误。 (超出范围)。

如有任何帮助,我们将不胜感激。抱歉,我是一个初学者,我相信你能看出来。

谢谢, 本

最佳答案

如果 readthisfile.csv 在文件末尾(或文件中的任何位置)有一个空行,那么您将得到一个空字符串。您不能取消引用空字符串的第 0 个字符。 string::operator[] 只接受从 0string::length() - 1 的索引。如果您有一个空字符串,对 string::operator[] 的任何调用都将导致未定义的行为。

关于c++ - 使用 C++,为什么我会收到错误消息 "string subscript out of range"而我知道它不是?或者至少看起来是这样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10097725/

相关文章:

vector 中不存在 C++ 字符串成员变量

javascript - 正则表达式: replace string in javascript

c++ - 谷歌测试 : can not create string from char array?

java - for 循环(记住最后查看的位置)&Character.isDigit()

c++ - 如何获取延迟模板参数的类型

c++ - 此文件需要 C++11 库支持

java - 如何处理Java中字符串的特定位置?

php - 如何将大量字符串与另一个字符串的开头进行比较?

java - 如何修复我的 Java 代码以验证变量?

c++ - 多重虚拟继承和可变参数模板