bufor jest rowniez std::string i domyslam sie, ze drugi dwuwiersz rozni sie od pierwsze tylko tym, ze drugi wynik wstawiasz do tymczasowej tmp ? dziwne.. [GDYBANIE]jedyne co mi na mysl przychodzi, ze copy-on-write lub inny podobny mechanizm oszczedzania pamieci w stringach spalil. tzn. ze:
bufor = bufor . substr (0 , x)
bufor = bufor . substr (x)
sa tozsame z :
bufor.assign( bufor . substr (0 , x) ) //A
bufor.assign( bufor . substr (x) ) //B
mozliwe, ze string zwracany z 'substr' jest tylko inteligentna kopia oryginalu, nie posiadajaca wlasnych danych, ale wiedzaca ze ona jest od-do, w tym przypadku assign z i-kopii w linii A jest bezpieczny - assign nie musi przepisywac danych, bo start jest taki sam i tylko end sie rozni -- wiec w efekcie assign wykona trucate. z kolei w linii B assign z i-kopii moglby byc niebezpieczny, gdyz musi przepisac dane, bo start sie zmienia - i w trakcie przepisywania jakis copy-on-write moze probowac oderwac/lub moze nie oderwac i-kopii od zmieniajacego sie wlasnie oryginalu..[/GDYBANIE]
nie, sorry - nie wiem.. to jest dziwne, nie przypominam sobie zebym spotkal sie z jakimkolwiek bledem cp-on-wr podczas operacji stringowych na samym sobie.. sugerowalbym przejrzenie calego kodu w okolicach tego 'bufor' oraz wyciachanie tych linijek do innego mikro-projektu .cpp i sprawdzenie czy na zhardcodowanych w pliku sciezkach te dwie linii tez sie blednie zachowuja
btw, podejscie Twoje jest troche na okolo, poniewasz funkcje find-x-of pobieraja tez index startowy, proponuje kod na wzor:
string bufor = "sda/sd/a/sd/a/d/dsad";
size_t pos_last = bufor.find_last_of("/\\");
size_t pos_2last = pos_last > 0 ? bufor.find_last_of("/\\", pos_last-1) : 0;
i teraz albo 1 przepisanie
docelowe = bufor.substr(pos_2last, pos_last - pos_2last); //mozliwy offby1-policz, plus jesli docelowe==bufor, to moze wystapic ten blad co u Ciebie
albo, lepsze 2 przykrojenia
bufor.resize(pos_last);
bufor.erase(0,pos_2last);
-- w tych 2 na pewno ten blad nie wystapi
niemniej, to co masz, powinno dzialac. substr zwroca kopie ktora -czy inteligentna czy nie - musi dac sie traktowac odrebnie gdyz jest nowym wystapieniem klasy std::string, i nie powinno wadzic assign z niej samej do oryginalu
ostatnie pytanie, ktore powinienem zadac na poczatku: jaki kompilator i jaka jego wersja? probowales na innym?