Jak tablice znaków powinny być używane jako ciągi znaków?

Rozumiem, że ciągi w C są tylko tablicami znaków. Wypróbowałem więc następujący kod, ale daje on dziwne wyniki, takie jak wyrzucanie elementów bezużytecznych lub awarie programu: #include <stdio.h> int main (void) { char str [5] = "hello"; puts(str); } Dlaczego to nie działa? Czyści...