请问关于数组,指针的有关问题

请教关于数组,指针的问题
请教问题。
以下程序,本来不输出东西,但若将*a= "abc "改为a[10]= "abc ",则输出
def
defmnl
mnl

我知道前两个puts(a)肯定不执行,但是为什么puts(d)前后分别是执行与不执行。

#include <stdio.h>
#include <string.h>

void   main()
{
char   *a= "abc ",*b= "def ";
char   c[10]= "mnl ";
char   d[10]= "aaaf ";

strcpy(a,b);
puts(a);

strcat(a,c);
puts(a);

strcpy(d,c);
puts(d);

}


------解决方案--------------------
没有改动前
程序执行到strcpy(a,b);puts(a);就产生错误,因为字符串常量不能写,于是发生了中断了,当然不会执行puts(d);
------解决方案--------------------
char * a = "abc " 中a是个野指针,只是指向一个内存单元,
在使用strcpy(char *aa, char *bb)时,系统不知道什么时候aa这个串结束,结果肯定是出现了意料之外的事情.

char d[10] = "** ";
char c[10] = "** ";
d和c是一个内存空间,以NULL结尾,系统就知道什么时候将c串放到d的单元中去.
------解决方案--------------------
winbondowen的说得很对,但是“char * a = "abc " 中a是个野指针”的说法我不认同,其实
char * a = "abc " 中a指向一个零结尾的只读字符串 "abc "!