Wyjście poza zakres tablicy char

Wyjście poza zakres tablicy char
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam. Napisałem program, a mianowicie funkcje strcpy w mojej wersji, tak dla sprawdzenia (dodam, że dopiero jestem za tablicami w Symfonii C++)

Kopiuj
 #include <iostream>
using namespace std;

void strcpyz(char _Dest[], const char _Source[])
{
    int i = 0;
    while(_Dest[i] = _Source[i])
        i++;
}

int main(int argc, char *argv[])
{
    char alibaba[3];
    strcpyz(alibaba, "Alibaba i 3 rozbojnikow");
    cout << alibaba << "\n";
    return 0;
}

Wydawało mi się, że jak alibaba jest tablicą 3 elementową typu char, to może ona przechowywać tylko 3 znaki.
To dlaczego wyświetla mi cały tekst Alibaba i 3 rozbojnikow ? Wiem, że po drodze nie ma znaku null, czy dalsze te znaki to komórki pamięci znajdujące się zaraz po alibaba czy właśnie w alibaba leży ten cały tekst a nie tylko 3 znaki ?

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
1

To jest tzw. undefined behaviour, niezdefiniowane zachowanie. C++ jest pełen tego typu pułapek.
Nie wolno tego robić, ale jak się uprzesz to kompilator nie musi zgłaszać błędu.
Może za to np. wysłać twoje nagie fotki na Facebooka.

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

czy dalsze te znaki to komórki pamięci znajdujące się zaraz po alibaba

Tak. Jak chcesz sprawdzić to zadeklaruj sobie drugą tablicę, zaraz za tą pierwszą i sprawdź potem co w niej znajdziesz ;)

  • Rejestracja: dni
  • Ostatnio: dni
0

dziękuje wszystkim za odpowiedzi :)

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

A wyswietla Ci dlatego, ze cout dla stringow dziala mniej-wiecej tak:

Kopiuj
cout(const char* x)
{
  while(*x) putchar(*(x++));
}

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.