字符数组奇怪的输出,为什么会这样?

img

img


为什么会这样?

字符2的十进制ascll码就是50 字符3的十进制ascll码就是51
你用%s打印的话就会是23 没什么不对的
你第二张图里面23后面多了个特殊字符是因为你定义的a数组只有2个字节,字符串要以'\0'结束,你这样打印会把栈里挨着的这一块区域直到遇到\0为止的都打印出来

字符串以\0结尾,这是基本常识吧
你这字符数组都没有\0做结尾,你拿它当字符串输出,后面不越界了,把不知道什么内存当数据输出了,一直到遇到0才能停下

每个ASCII码存储在一个Byte中,从0到127的数字代表不同的常用符号,如65代表大写A,97代表小写A。由于ASCII字节的7位中,最高位没有使用,那么最高位也被纳入这个内部代码,成为8位ASCII(ExtendedASCII代码。这种内部代码现在常用于许多特殊符号,如外语和表格。
50对应的是2,51对应的是3
你输入的是字符数组,但是你直接往里放了数字,他认为你放的是ascii码

第一图:char a[2] = { 50,51 }; 数组a[2] 有两个元素,赋初值 50 51 ,这定义的是字符数组,不能用字符串strlen()函数得到准确的长度值,也不能用字符串格式 %s 输出。
第二图:char a[3] = { 50,51 }; 数组a[3] 有三个元素,其中第一第二赋初值,第三个元素自动被赋 0值,a[3] = {50,51,0} , 相当于定义一个字符串,所以后面用于字符串的函数输出都可以使用。