Char i cin - wychodzenie poza zakres.

0

Witam.
Nie rozumiem czemu po stworzeniu takiego kodu:

 #include <iostream>
using namespace std;

int main()
{
char tab[5];
cin>>tab;
cout<<tab[8];
return 0;
}

program mój się kompiluje i po wpisaniu wyrazu dłuższego niż 4 znaki i tak wyświetli 8 element, choć teoretycznie nie ma do niego dostępu.
Mój kompilator to g++.
Pozdrawiam

2

Z tego powodu, że nie pilnujesz czy nie wychodzisz poza zakres tablicy.
Można to zrobić tak: cin >> setw(5) >> tab;. setw jest zdefiniowany w nagłówku iomanip.
Dlatego do wczytywania napisów lepiej używać std::string

3

Mażesz po pamięci, dokładniej po stosie, przy dłuższym wprowadzonym napisie będzie jakiś Access Violation i/lub zamazywanie innych zmiennych. C/C++ nie sprawdza zakresów.

0

Dokładnie jak mówisz. Po wpisaniu iluś tam znaków występuje błąd segmentation fault. Dziękuje za wyjaśnienie.

1

Sa ciekawsze sprawy, chociazby:

#include <iostream>
using namespace std;

int main() {
    char tab[5];
    char tab2[5];
    cin >> tab2;
    cout << tab << endl;
    return 0;
}

Wyswietla wszystkie wpisane znaki poza 5 pierwszymi :>
Co jednak nie jest poprawne nigdzie i nie nalezy tak robic.

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