我可以像这样初始化一个空的2D C字符串吗?

时间:2018-11-19 07:18:00

标签: c arrays string c-strings

我可以像这样初始化一个空的二维C字符串吗?

data

我不确定在这样的函数中定义字符串s时是否会将其初始化为空。

1 个答案:

答案 0 :(得分:3)

不,如果您希望代码可移植C:

% gcc -pedantic-errors -c init.c 
init.c: In function ‘function’:
init.c:2:19: error: ISO C forbids empty initializer braces [-Wpedantic]
   char s[50][50]={{}};
                   ^

它是GCC扩展名。但是,您可以在括号中添加零:

char s[50][50] = {{0}};

或什至只用一组括号:

char s[50][50] = {0};

它将找到第一个标量元素,并使用给定的值对其进行初始化,其余未显式初始化的元素将被初始化,就好像它们具有零初始值设定项一样。 (请注意:您可以对单个元素使用说出 42 ,其余元素仍将初始化为零)。

或者,由于这些是 char 的数组,因此可以在大括号中使用字符串:

char s[50][50] = {""};

这将使用空字符串初始化s[0]


另一个扩展(零长度的灵活数组成员的初始化)需要GCC的空初始化器({ })。它不仅仅只是通用的缩写。

标准C不支持灵活数组成员的初始化,也不支持长度为零的数组。