int main()
{
char a[7] = "Network";
return 0;
}
A строковый литерал в C завершается внутри с символом nul. Таким образом, приведенный выше код должен давать ошибку компиляции, так как фактическая длина строкового литерала Network
равна 8 и не может быть помещена в массив char[7]
.
Однако gcc (даже с -Wall
) на Ubuntu компилирует этот код без каких-либо ошибок или предупреждений.
Почему gcc разрешает это, а не помечать его как ошибку компиляции?
gcc только дает предупреждение (все еще нет ошибки!), когда размер массива char меньше, чем строковый литерал. Например, он предупреждает:
char a[6] = "Network";
[Related] Visual С++ 2012 дает ошибку компиляции для char a[7]
:
1>d:\main.cpp(3): error C2117: 'a' : array bounds overflow
1> d:\main.cpp(3) : see declaration of 'a'