dom*_*son 4 c string initialization
我见过这样的代码:
char str[1024] = {0, };
Run Code Online (Sandbox Code Playgroud)
并怀疑它类似于这样做:
char str[1024];
str[0] = '\0';
Run Code Online (Sandbox Code Playgroud)
但我在上面找不到任何东西,所以我不确定。
这是什么(称为),它有什么作用?
免责声明:我知道之前可能有人问过并回答过这个问题,但搜索{0, }非常困难。如果你能指出重复,我很乐意删除这个问题。
不,它们不一样。
这个说法
char str[1024] = {0, };
Run Code Online (Sandbox Code Playgroud)
将第一个元素初始化为给定的 value 0,所有其他元素都将被初始化,就好像它们具有静态存储一样,在这种情况下,使用 value 0。从语法上讲,这类似于使用
char str[1024] = {0};
Run Code Online (Sandbox Code Playgroud)
引用C11,第 6.7.9 章,第 21 页
如果花括号括起来的列表中的初始值设定项少于聚合的元素或成员,或者用于初始化已知大小数组的字符串文字中的字符少于数组中的元素,则聚合的其余部分应隐式初始化与具有静态存储持续时间的对象相同。
并且,来自 p10(强调我的)
如果没有显式初始化具有自动存储持续时间的对象,则其值是不确定的。如果没有显式初始化具有静态或线程存储持续时间的对象,则:
如果是指针类型,则初始化为空指针;
如果它有算术类型,则初始化为(正或无符号)零;
如果是聚合,则根据这些规则(递归地)初始化每个成员,并将任何填充初始化为零位;
如果是联合,则根据这些规则(递归地)初始化第一个命名成员,并将任何填充初始化为零位;
另一方面
char str[1024];
str[0] = '\0';
Run Code Online (Sandbox Code Playgroud)
只初始化第一个元素,其余元素保持统一化,包含不确定的值。