【发布时间】:2012-11-09 13:25:13
【问题描述】:
int main()
{
char a[7] = "Network";
return 0;
}
C 中的 字符串文字 在内部以 nul 字符 结束。因此,上面的代码应该给出一个编译错误,因为字符串文字 Network 的实际长度是 8 并且它不适合 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'
【问题讨论】:
-
也许您正在使用 gcc 将代码编译为 C,在 Visual Studio 中编译为 C++。它们只是表面上相似的语言。
-
@nos:是的,这解释了这种行为!我想这是 C 和 C++ 之间类 C 代码的微小差异之一。
-
如果我没记错的话,g++会出错
标签: c++ c compiler-errors string-literals arrays