Por que o gcc permite a inicialização do array char com string literal maior que array?

int main()
{
    char a[7] = "Network";
    return 0;
}

A literal de string em C é terminado internamente com umpersonagem nulo. Então, o código acima deve dar um erro de compilação desde o comprimento real da string literalNetwork é 8 e não pode caber em umchar[7] array.

Contudo,gcc (mesmo com-Wall) no Ubuntu compila este código sem nenhum erro ou aviso. Por que o gcc permite isso e não sinaliza como erro de compilação?

O gcc apenas dá um aviso (ainda sem erro!) quando o tamanho do array char é menor que o literal da string. Por exemplo, ele avisa sobre:

char a[6] = "Network";

[Relacionado]Visual C ++ 2012 dá um erro de compilação parachar a[7]:

1>d:\main.cpp(3): error C2117: 'a' : array bounds overflow
1> d:\main.cpp(3) : see declaration of 'a'

questionAnswers(4)

yourAnswerToTheQuestion