如何为char-array(gcc)的c字符串启用警告?

时间:2015-05-06 12:01:44

标签: c++ c arrays string gcc

以下问题:我想用字符串文字初始化一个字符数组,如下所示:

char test[6] = "hello";

字符串"你好"终止0需要5个字符+ 1,所以6的数组就足够了。当我尝试这样做时:

char test[4] = "hello";

我收到这样的编译器警告:

  

警告:字符数组的初始化字符串太长[默认情况下启用]

但是当我尝试这个时:

char test[5] = "hello";

不会发出任何警告。很明显,在这种情况下,编译器不会对字符串使用终止0,这会在我的代码中导致意外行为。是否有可能在编译器中激活警告?或者是否有一些预处理程序断言可以找到这样的问题? 我知道的唯一方法是不使用字符串文字进行初始化,而是使用普通的数组初始化:

char test[5] = {'h', 'e', 'l', 'l', 'o', '\0'};

这将导致以下警告:

  

警告:数组初始值设定项中的多余元素[默认启用]

PS:我知道我可以在我的例子中省略数组的长度,如下所示:

char test[] = "hello";

但是在实际代码中,这不是一个选项,因为最大字符串长度是一个全局常量:

#define MAX_STRING_LEN
char string[MAX_STRING_LEN + 1] = "default_string";

我知道MAX_STRING_LEN的值我可以手动检查默认字符串是否不长于MAX_STRING_LEN,但这很容易出错,如果我或代码的某个用户是/不小心,这会导致意外行为,所以我希望编译器做这个检查。

0 个答案:

没有答案