【发布时间】:2014-01-08 19:04:27
【问题描述】:
假设我有以下 c char 数组:
char okaysize4[5] = "four"; // line 5
char toosmall4[4] = "four"; // line 6
char toosmall3[3] = "four"; // line 7
当我使用 gcc 4.4.7 编译时,出现以下错误:
array.c:7: 警告:字符数组的初始化字符串太长
第 7 行会出现此错误,因为我试图将 5 个字符 ("four" + \0) 填充到 3 元素数组中。
由于 5 元素数组足够大,所以第 5 行也不会出现错误。
但令我惊讶的是,第 6 行没有类似的错误。最终在 toosmall4 中初始化的是一个未终止的字符串,这可能会导致各种麻烦。
我的理解是 c 字符串文字 "four" 应该是五个字符长,由于空终止符。其实sizeof("four")是5。那为什么编译器不会在这里报错呢?
有什么方法可以改变我的声明/定义/初始化,以便在这种情况下标记错误?
【问题讨论】:
标签: c arrays compiler-errors char initialization