¿Por qué gcc permite la inicialización de la matriz de caracteres con una cadena literal más grande que la matriz?

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

A cadena literal en C se termina internamente con unanul carácter. Por lo tanto, el código anterior debe dar un error de compilación ya que la longitud real de la cadena literalNetwork es 8 y no puede caber en unachar[7] formación.

Sin embargo,gcc (incluso con-Wall) en Ubuntu compila este código sin ningún error o advertencia. ¿Por qué gcc permite esto y no lo marca como error de compilación?

gcc solo da una advertencia (¡aún no hay error!) cuando el tamaño de la matriz de caracteres es más pequeño que el literal de cadena. Por ejemplo, advierte sobre:

char a[6] = "Network";

[Relacionado]Visual C ++ 2012 da un error de compilación parachar a[7]:

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

Respuestas a la pregunta(4)

Su respuesta a la pregunta