int main()
{
char a[7] = "Network";
return 0;
}
A string literal in C is terminated internally with a nul character. So, the above code should give a compilation error since the actual length of the string literal Network
is 8 and it cannot fit in a char[7]
array.
However, gcc (even with -Wall
) on Ubuntu compiles this code without any error or warning.
Why does gcc allow this and not flag it as compilation error?
gcc only gives a warning (still no error!) when the char array size is smaller than the string literal. For example, it warns on:
char a[6] = "Network";
[Related] Visual C++ 2012 gives a compilation error for char a[7]
:
1>d:main.cpp(3): error C2117: 'a' : array bounds overflow
1> d:main.cpp(3) : see declaration of 'a'
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…