Wyjście poza zakres tablicy char

0

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

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

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.

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 ;)

0

dziękuje wszystkim za odpowiedzi :)

1

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

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

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