才学指针与数组的关系,有个有关问题不明白

才学指针与数组的关系,有个问题不明白
我想用指针初始化一个字符数组,代码如下

char a[9];
char *p = a;
int n = '1';
while(*p != '\0'){
 *p = n;
p++,n++;
}
printf("%s",a);

为什么打印的是1234567
------解决方案--------------------
这是由于没有初始化a数组的问题。a由于没有初始化,所以刚好a[7]的ascii值为0,而a[7]以前都不为0。所以会出现你的结果,你可以把a[9]每个元素的ascii值打印出来。我运行的结果是这样的

-64 5 64 0 0 0 0 0 0 
123

上面一行为a[9]的各元素的ascii值。下面一行为输出结果。
------解决方案--------------------
之申明,未定义的变量出现的数字都是随机数。