résilier appelé après avoir jeté une instance de 'std::out_of_range' ce(): basic_string::substr

J'ai reçu ce message d'erreur: "résilier appelé après avoir jeté une instance de 'std::out_of_range'
ce(): basic_string::substr"
à partir de ce code:

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <cstdlib>

using namespace std;

vector <string> n_cartelle;

ifstream in("n_cartelle.txt");
string linea;

while(getline(in,linea))
n_cartelle.push_back(linea);


for(int i=0; i < 4; ++i){


if(n_cartelle[i].substr(n_cartelle[i].size()-3) == "txt")
cout <<"si"<<endl;
else
cout<<"no"<<endl;

}

Si j'essaie avec ceci:

if(n_cartelle[7].substr(n_cartelle[7].size()-3) == "txt")
cout <<"si "<<n_cartelle[7]<<endl;
else
cout<<"no"<<endl;

Je n'ai pas l'erreur.

  • Je n'ai pas de problème pour compiler ce code, mais pour exécuter dans windows 7 pro.
  • La taille de la chaîne à partir de laquelle vous essayez d'extraire la sous-chaîne est probablement moins de 3 caractères. Imprimer la chaîne, et il est de taille à l'intérieur de la for avant d'essayer d'extraire la sous-chaîne.
  • c'est probablement, oui
InformationsquelleAutor inyourmind | 2014-03-02