Zasada działania tablicy char

0

Zauważyłem że przy tworzeniu tablicy char należy zawsze podać w każdym wymiarze o jedną komórkę więcej niż wpiszemy w nią znaków, inaczej wywala błąd, dlaczego tak się dzieje? Poza tym da się wypisać komórki które nie istnieją takiej tablicy, np z tab[2][2] możemy wypisać cout<<tab[2][3] wtedy wypisuje przypadkowy(?) symbol który był wpisany w poprawną komórkę tej tablicy. Ciekawi mnie dlaczego tak jest i o co mniej więcej tu chodzi.

0

Tekst "abc" ma w sumie 4 znaki bo 'a', 'b', 'c', '\0'
Jak zabraknie \0 na końcu to funkcja wypisująca tekst nie będzie wiedziała kiedy jest koniec tekstu i wypisze przypadkowe dane, a zapisując nadpisze dane za buforem.

0

C/C++ było projektowane jako szybkie. Właśnie dlatego nie ma sprawdzania zakresu tablic. Niestety jest ono dość błędogenne i prowadzi czasami do trudnych do znalezienia błędów. Dlatego raczej nie korzystamy z nowoczesnym C++ z gołych tablic, a bardziej zaawansowanych struktur gdzie takie sprawdzanie zakresu już istnieje.

Moim zdaniem narzut wydajnościowy który będziemy mieli podczas sprawdzania zakresu nie jest aż taki duży, ale w zamian mamy pewność że wychodząc poza zakres tablicy nie nadpiszemy np. jakiejś innej zmiennej, co wcześniej czy później doprowadzi do błędnego działania programu.

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