Przeszukiwanie AnsiString

0

Witam, mam pewien problem, otóż zrobiłem sobie program, który pobiera źródło strony html i teraz chciałbym je sobie przeszukać. Miałoby to polegać na tym, że funkcja sprawdzałaby czy 3 stojące obok siebie znaki odpowiadają 'S' , 'I' oraz 'D'. Cała zawartość strony jest zapisana do zmiennej AnsiString.

Oto kod funkcji odpowiadającej za przeszukiwanie tego ciągu:

char *search(char *txt)
{
    txt+=90;

    for(;;)
    {
        txt++;

        if((*txt == 'S') && (*(txt-1) == 'I') && (*(txt-2) == 'D'))
        {
            txt+=4;
            break;
        }
    }

    for(int x=0;x<40;x++)
        wynik[x] = *(txt++);

    return wynik;
}

Problem polega na tym, że wywala mi błąd o treści: "Access violation at address 00401E3A in module 'Project1.exe'. Read of address 0095C000."

Wywołanie tej funkcji wygląda w sposób następujący:

    AnsiString x = search(Msg.c_str());
    Edit1->Text = x;

Zmienne "Msg" oraz "wynik" są zadeklarowane następująco:

AnsiString Msg;
char wynik[40];

W dodatku po wywaleniu błędu w programie Borland CPP Builder zaznacza mi linijkę z if, a dokładniej:

if((*txt == 'S') && (*(txt-1) == 'I') && (*(txt-2) == 'D'))

Czy ktoś wie co jest nie tak z kodem który napisałem? Jeszcze mam takie pytanie: jak ustawiam wskaźnik char *txt na Msg.c_str() to wskaźnik ten pokazuje na pierwszy element czy który? Pytam, bo kiedy zrobiłem opercję txt+=100 to dostałem tekst gdzieś z środka, na pewno nie był to setny element, ani nic w tych okolicach.

0

Ukradli dokumentację do string::c_str() ?
TYLKO w chwili wywołania tej metody char* stworzony przez nią istnieje, później może go już nie być, a ta pamięć może być używana w zupełnie innym celu. NIE WOLNO sobie z tego char* korzystać wewnątrz funkcji ani nigdzie indziej!

0

Poza tym ta pętla przejeżdża ci poza zakres czegokolwiek ;] powinno być:

while(*txt) {...}

1 użytkowników online, w tym zalogowanych: 0, gości: 1