Dlaczego gcc zezwala na inicjalizację tablicy char z literałem łańcuchowym większym niż tablica?

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

A literał ciągu w C jest wewnętrznie zakończony za pomocąnul charakter. Powyższy kod powinien więc dać błąd kompilacji, ponieważ rzeczywista długość literału łańcuchowegoNetwork ma 8 i nie może zmieścić się wchar[7] szyk.

Jednak,gcc (nawet z-Wall) na Ubuntu kompiluje ten kod bez żadnego błędu lub ostrzeżenia. Dlaczego gcc pozwala na to i nie zaznacza go jako błąd kompilacji?

gcc wyświetla ostrzeżenie (nadal bez błędu!), gdy rozmiar tablicy znaków jest mniejszy niż literał ciągu. Na przykład ostrzega przed:

char a[6] = "Network";

[Związane z]Visual C ++ 2012 daje błąd kompilacji dlachar 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