为什么此次输出为ab加乱码,可以从内存等多角度分析下吗
%s输出是将a作为字符串看待的。字符串的标志是末尾有字符串结束符,也就是ASCII码的0值,或者就是绝对的0值,不是字符'0'。由于你定义的a数组只有两个字符a和b,并没有字符串结束符。所以printf会从a的首地址开始一直输出内存数据,直到遇到第一个绝对的0值为止,在这之间的内存数据都按字符进行输出,如果不在可见字符范围内,就会输出乱码。
因为你数组定义小了,字符数组会在字符最后加上字符串结束标志'\0',而你的数组大小为2,又放了两个元素,所以无法存放字符串结束标志'\0',所以在输出时会出现这种情况。
字符串以\0结尾
%s是输出字符串,要一直输出到\0为止