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

Can I initialize an empty 2D C string like this?

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

int function(void){
  char s[50][50]={{}};
}

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

不,你可能不会,如果你希望你的代码是可移植的 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};

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

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

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

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


另一个扩展 需要 GCC 的空初始值设定项 ({ }) - 零长度灵活数组成员的初始化。它不只是作为一个通用的 shorthand 而存在。

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