我可以像这样初始化一个空的 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 不支持灵活数组成员的初始化,也不支持长度为零的数组。
我可以像这样初始化一个空的二维 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 不支持灵活数组成员的初始化,也不支持长度为零的数组。