你那个写法一定出乱码!你的编译器不给力,其实这是在编译阶段就应能检测出来的错误,你将编译器的警告级别开到最大,应该得到警告。如果编译器不警告,这种写法的代码,在执行时会出现“未定义行为”——分配给c[5]的空间是5byte,但用了6byte的数据填入这个空间,多出来的那1byte,不知覆盖了什么数据(不过这种初始化行为怎么操作,是编译器的自由)。
对这种情况,你最稳妥的做法,是不要明确c[5],写成c[] = "*****",就不会出现错误。注意:你后面的输出,是0-4,总共5char,但事实上c[5]只应有4char,到第5char时,出现什么问题,就取决于编译器在前面初始化时给这个位置写入什么东西。当整个程序只有"*****"这个静态数据时(书本上可能就是如此),似乎没有什么问题,但你现在的程序,静态数据不止这一个(还有你后来写的空格串,也极可能截断"*****"的第6位'\0'把自己接上去),问题就出现了。