int main()
{
char a[7] = "Network";
return 0;
}
Cの文字列リテラルは、内部的にヌル文字で終了します。したがって、文字列リテラルの実際の長さは 8 であり、配列Network
に収まらないため、上記のコードはコンパイル エラーになるはずです。char[7]
ただし、 Ubuntu のgcc (を使用しても-Wall
) は、エラーや警告なしでこのコードをコンパイルします。gcc がこれを許可し、コンパイル エラーとしてフラグを立てないのはなぜですか?
gcc は、char 配列のサイズが文字列リテラルより小さい場合にのみ警告を発します (まだエラーは発生しません!)。たとえば、次のように警告します。
char a[6] = "Network";
[関連] Visual C++ 2012でコンパイル エラーが発生するchar a[7]
:
1>d:\main.cpp(3): error C2117: 'a' : array bounds overflow
1> d:\main.cpp(3) : see declaration of 'a'