我可以像这样初始化一个空的二维C字符串吗?
data
我不确定在这样的函数中定义字符串s时是否会将其初始化为空。
答案 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不支持灵活数组成员的初始化,也不支持长度为零的数组。