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

Dlaczego Builder C++ numeruje znaki (indexy tablicy String) od 1 zamiast od 0?

Object Storage Arubacloud
0 głosów
453 wizyt
pytanie zadane 16 września 2017 w Rozwój zawodowy, nauka, praca przez Przemysław Obywatel (1,510 p.)

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.

1 odpowiedź

+2 głosów
odpowiedź 16 września 2017 przez draghan VIP (106,230 p.)
wybrane 16 września 2017 przez Przemysław
 
Najlepsza
Po prostu takie rozwiązanie przyjęli twórcy biblioteki VCL, którą wykorzystuje Builder. Być może ma to związek z kompatybilnością z Pascalem / Delphi... Ale nie wiem. :)

http://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/EN/html/delphivclwin32/System__AnsiString__[]@int.html
komentarz 16 września 2017 przez jeremus Maniak (59,720 p.)
chyba masz rację - w Pascalu w elemencie 0 - stringa przechowywana jest jego długosc

Podobne pytania

0 głosów
1 odpowiedź 269 wizyt
0 głosów
1 odpowiedź 331 wizyt
pytanie zadane 4 grudnia 2015 w C i C++ przez Endey Nowicjusz (120 p.)
0 głosów
1 odpowiedź 293 wizyt
pytanie zadane 24 stycznia 2017 w C i C++ przez Fouks Nowicjusz (120 p.)

92,555 zapytań

141,403 odpowiedzi

319,555 komentarzy

61,940 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...