Cześć!
Programując w C++ Builderze (Borland), natknąłem się na dziwny błąd.
Funkcja, która coś tam robiła na stringach, wywalała podczas działania programu błąd "out of range".
Kazałem jej więc wypisywać kolejne znaki stringa do notatnika i ku mojemu zdziwieniu, okazuje się, że ów błąd występuje, gdy program próbuje wypisać zerowy znak stringa (text[0]), a sam tekst zaczyna się od indexu 1.
Dla przykładu, stworzyłem funkcję:
bool TForm1::ihaveaproblemwithstring(String text)
{
if(text.Length() == 0)
return false;
for(int i = text.Length()-1; i>=0; i--)
{
//log(), to funkcja wypisująca string do notatnika
log("\n Na indexie nr: ");
log(String(i));
log(" jest wartosc: ");
log(text[i]);
}
return true;
}
Podając jej wartość "Zelent", program wiesza się, a w notatniku mam:
Na indexie nr: 5 jest wartosc: n
Na indexie nr: 4 jest wartosc: e
Na indexie nr: 3 jest wartosc: l
Na indexie nr: 2 jest wartosc: e
Na indexie nr: 1 jest wartosc: Z
Na indexie nr: 0 jest wartosc:
Ok... może i nie jest to jakiś wielki problem - mogę przecież zaczynać numerację od 1, ale chciałbym się dowiedzieć dlaczego tak jest.