Nenhum erro fora dos limites

Eu tenho esse código em C, que leva um monte dechars

#include<stdio.h> 
# define NEWLINE '\n'
int main()
{

char c;
char str[6];
int i = 0;
while( ((c = getchar()) != NEWLINE))
{
        str[i] = c;
        ++i;
        printf("%d\n", i);
}

return 0;
}

Input é: testtesttest

Output: 1 2 3 4 5 6 7 8 117 118 119 120

As minhas perguntas são:

Por que não recebo uma exceção fora dos limites (falha de segmentação), embora exceda claramente a capacidade da matri

Por que os números na saída saltam repentinamente para números muito grandes?

Tentei isso em C ++ e tenho o mesmo comportamento. Alguém poderia explicar qual o motivo disso?

questionAnswers(16)

yourAnswerToTheQuestion