Char i cin - wychodzenie poza zakres.

Char i cin - wychodzenie poza zakres.
CO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 31
0

Witam.
Nie rozumiem czemu po stworzeniu takiego kodu:

Kopiuj
 #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

byku_guzio
  • Rejestracja: dni
  • Ostatnio: dni
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

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
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.

CO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 31
0

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

n0name_l
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2412
1

Sa ciekawsze sprawy, chociazby:

Kopiuj
#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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.