• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[C++] problem z implementacją systemu znanego z konsoli (cd..)

Aruba Cloud - Virtual Private Server VPS
0 głosów
208 wizyt
pytanie zadane 2 kwietnia 2018 w C i C++ przez Hiskiel Pasjonat (22,830 p.)

Witam! 

Siedzę nad tym jakiś czas i główkuję. Nie potrafię się nagłowić. Dlaczego to nie działa:

   else if(Command.substr(0, 4)=="cd.."){

            string path = CurrentDir;
            if(count(path.begin(), path.end(), '\\')!=1){
                if(path[path.length()-1]=='\\')
                path.erase(path.length()-1, 1);

                cout<<"pre: "<<path<<endl;
                auto beg = path.find_last_of('\\');
                auto end = path.find_last_not_of('\\');
                path.erase(beg, (end-beg)+1);
                cout<<"post: "<<path<<endl;
                CurrentDir = path;
            }
        }

niby post zwraca poprawną ścieżkę (defaultowa jest C:\Windows\System32\, post zwraca C:\Windows) ale za drugim razem wywal błąd out of range :/. Nie rozumiem gdzie leży problem

 

Pozdrawiam, Hiskiel.

2 odpowiedzi

0 głosów
odpowiedź 2 kwietnia 2018 przez Qwerty96 Stary wyjadacz (13,580 p.)
Jak wyrzuca std::out_of_range to znaczy, że pierwszy parametr metody std::string::erase jest większy od długości stringa. W kodzie w ogóle nie sprawdzasz wartości zwróconej z metody find_last_of, która może zwrócić std::string::npos. Przekazanie takiej wartości do erase może spowodować wyrzucenie wyjątku.
0 głosów
odpowiedź 2 kwietnia 2018 przez j23 Mędrzec (195,240 p.)
 path.erase(path.length()-1, 1); 

std::string::pop_back

 

Tak daj:

    auto beg = path.find_last_of('\\');
    if(beg != string::npos) path.erase(beg);
    cout << "post: " << path << endl;

Podobne pytania

0 głosów
0 odpowiedzi 173 wizyt
0 głosów
0 odpowiedzi 134 wizyt
pytanie zadane 14 września 2024 w Sprzęt komputerowy przez danio9918 Początkujący (400 p.)
0 głosów
1 odpowiedź 423 wizyt
pytanie zadane 19 października 2022 w Systemy operacyjne, programy przez Rykez Początkujący (250 p.)

93,324 zapytań

142,323 odpowiedzi

322,390 komentarzy

62,653 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...