我想知道以下两者是否有区别:
char s[32] = "";
并且:
char s[32] = {0};
感谢您使用我们的服务。
两种声明方式没有区别:
char bla[32] = {0};
and
char bla[32] = "";
请参考 C 标准的相关段落(重点在于下面的文字):
(C99,6.7.8p21)"如果大括号中包含的初始化项少于聚合体(aggregate)的元素或成员数量,或者用于初始化已知大小数组的字符串字面值中字符数少于数组元素数量,则该聚合体的其余部分将隐式地被初始化为具有静态存储期的对象相同。"
'\0' == 0
。 - Philip'\0'
只是另一种写int
0的方式。 - Daniel Fischer""
仅适用于char类型的数组(带或不带像const
或unsigned
之类的修改),但{0}
适用于所有数字类型的数组。""
也会初始化整个数组。{0}
适用于允许具有初始化程序的任何数据类型。另一方面,它不适用于所有数组,即不适用于VLA,因为这些数组不能有初始化程序。 - Jens Gustedt没有区别。你也可以自己看看!这是你能得到的最可靠的答案。只需使用调试器。执行这两行并比较结果。但是你应该重命名数组。我使用gcc/gdb编译以下代码:
int main(int argc, char* argv[])
{
char s[5] = {0};
char t[5] = "";
return 0;
}
通过gcc -g test.c编译代码,然后调用gdb a.out进行调试。在gdb中输入
break 5
run
print s
最后一个语句的输出如下:
$1 = "\000\000\000\000"
$2 = "\000\000\000\000"
这告诉我,在我选择的编译器下,这两个语句的结果是相同的。
int x; std::cout << x << '\n';
- 你可能会偶然看到你期望的数字(特别是如果你期望得到0),但重新运行程序或重新编译它,你可能会得到不同的输出... - Tony Delroy除了已经说过的内容以外:
char s[32] = "";
=
char s[32] = {'\0'};
=
char s[32] = {0};
=
char s[32] = {0, 0, 0, /* ...32 zeroes here*/ ,0 };
{0}
和""
没有区别,可以尝试其他类型进行比较,例如使用int
数组而不是char
数组,这时你就会看到区别了。 - Mr Lister