记得刚工作的时候,每次用字符串数组都是小心翼翼。当时基本都是这样:
char str[32];
memset(str, 0, sizeof(src));
那时颇为自豪,自认为很少有菜鸟能像我这样注意这些问题。直到后来有一次代码review,在一老鸟面前班门弄斧,结果被他指出来了,说我这样会浪费一次函数调用,直接char str[32] = {0}
更好。刚开始我还以为这是一种特殊语句,是把数组的每个元素都赋0。
有一次我想把数组全初始化成1,就直接int list[4] = {1}
。结果进引起了一个bug,害得我花了很长时间才找到问题所在——list中除了第一个是1,其它的都是0。于是我决定好好研究一下,争取不再犯这样的错误。
其实,这玩意很简单,简单到不能再简单了,以至于研究完了我都觉得羞愧了。。。
首先,看下面的语句:
char str[4] = {'0', '1', '2', '3'};
这是标准的数组初始化方法,字符串数组的每个元素都被赋上初始值(大括号内的个数等于数组长度)。
当大括号内的值小于数组长度的时候,比如:
char str[4] = {'0', '1'};
str[0]和str[1]会被赋上相应的初始值,而剩下的元素会被初始化成0。这基本是没本C语言书里面都会讲到的。
所以,反过来再看看之前的例子:
int list[4] = {1};
就是把第一个元素赋1,其他的元素都被初始化成0。
就是这么简单。