C语言中文的输出输入

为什么会出现这种情况,求大神

很简单啊,数组越界了呗。
字符串中三个汉字占6个字节,还需要一个'\0'(其实值就是0)来表示字符串结束了。
另外要说明的是,二维数组在通常情况下是当成一维数组来处理的,即a[1]的6个字节就是跟在a[0]的6个后面,然后再a[2],a[3]这样。
读入“一二三”的时候会将a[0]的6个字节占潢,然后'\0'被放在后面一个字节(其实就是a[1][0]),然后读入“四五六”的时候这个'\0'就被覆盖了,然后“四五六”占据a[1]的6个字节,再占用了a[2][0](第13个字节)为'\0'
输出的时候printf会沿着首地址一直读,直到'\0'为止,所以从一开始读就会是一二三四五六了。
说的很复杂,其实自己画个图很容易明白。解决办法就是把a[100][6]改成a[100][7]
温馨提示:答案为网友推荐,仅供参考
相似回答