确定数组a的大小之后
你没设置数组大小就只为数组分配了{0}中0这一个元素这样子数组分配空间的长度就只有1个字节。之后用scanf对数组赋值。如果输入的字符数大于1个,会造成数组下标越界。多于的字符会写入到数组分配空间之后的未知空间中,可能循环变量i的空间地址就处于这块未知空间中,这样循环变量i的值就被意外的改变了,变成大于等于3就退出循环了。
int a[] ={0}表示a中只有一个元素,并不是不确定,所以在scanf("%s",a)这里的时候,直接超出a的空间大小导致内存出错。