Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Rozdział 28, błąd po uruchomieniu programu

Ostatnio zmodyfikowano 2017-09-16 15:00
Autor Wiadomość
Hubert999aa
Temat założony przez niniejszego użytkownika
Rozdział 28, błąd po uruchomieniu programu
» 2017-09-16 13:35:01
Witam, mam problem z zadaniem domowym z rozdziału 28. Po wstępnej kompilacji i próbie uruchomienia części programu wyskakuje mi taki tekst:

Znak zostal odnaleziony na pozycji 0
Znak zostal odnaleziony na pozycji 11
Znak zostal odnaleziony na pozycji 40
Nie znaleziono znaku w tekscie
terminate called after throwing an instance of 'std::out_of_range'
  what():  basic_string::erase: __pos (which is 4294967295) > this->size() (which is 45)

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

Następnie pojawia się że program przestał działać.


Mój kod źródłowy:
C/C++
#include <iostream>
#include <string>

std::string konwertuj( std::string & sTekst )
{
    std::string sWynik;
    int i = 0;
   
    do
    {
        size_t znalezionaPozycja = sTekst.find( '<' );
        if( znalezionaPozycja == std::string::npos )
             std::cout << "Nie znaleziono znaku w tekscie" << std::endl;
        else
             std::cout << "Znak zostal odnaleziony na pozycji " << znalezionaPozycja << std::endl;
       
        i++;
       
        sTekst.erase( znalezionaPozycja, 1 );
        sTekst.insert( znalezionaPozycja, "[" );
       
       
    } while( i < 6 );
   
    return sWynik;
}
int main()
{
    std::string tekst = "<b>to jest </b> testowy       napis     <b>:)";
    std::cout << konwertuj( tekst ) << std::endl;
    return 0;
}

No i głównie moje pytanie to o co chodzi, czemu wyrzuca mi taki błąd ?
P-164947
Luq
» 2017-09-16 15:00:01
Co z tego, że wypisujesz komunikat, że nie znaleziono znaku w tekście gdy
znalezionaPozycja == std::string::npos
, skoro i tak później przekazujesz tę wartość do
std::string::erase
.
P-164948
« 1 »
  Strona 1 z 1