新手求助,大佬们帮帮忙
代码如下:#include <stdio.h>
main()
{
char c1='\101',c5='116';
printf("c1=%c,c5=%c",c1,c5);
}
想知道为什么c5的输出结果是6啊?是因为溢出吗,ASCII码里没有字符116,所以溢出吗
实验了几遍,发现超出10的,c5的结果都是最后一位数
求大佬讲一下原理? 本帖最后由 jackz007 于 2020-11-18 18:14 编辑
char c5 = '116'
没有什么原理可讲,这本身就是一种错误的表达,估计编译器在编译的时候,留取了 '116' 中位于最后的字符 '6' 作为了 c5 的数值。你也可以试一下其它组合,比如,char c5 = '399' 看看是不是这样。 jackz007 发表于 2020-11-18 18:11
没有什么原理可讲,这本身就是一种错误的表达,估计编译器在编译的时候,留取了 '116' 中位于最 ...
只要是超过了10的都是这样 本帖最后由 jackz007 于 2020-11-18 19:57 编辑
育人三代 发表于 2020-11-18 19:03
只要是超过了10的都是这样
和超过 10 没有关系,除了有转义字符引导,单引号中只要多于 1 个字符都是错误的。不符合规则的写法不具有可推广性,建议楼主不要过于在这方面计较。 本帖最后由 风过无痕1989 于 2020-11-19 00:41 编辑
输入:c1='\101',c5='116'
输出:c1 = A,c5 = 6
输入:c1='\126',c5='127'
输出:c1 = V,c5 = 7
输入:c1='\131',c5='138'
输出:c1 = Y,c5 = 8
输入:c1='\132',c5='149'
输出:c1 = Z,c5 = 9
输入:c1='\133',c5='151'
输出:c1 = [,c5 = 1
输入:c1='\134',c5='162'
输出:c1 = \,c5 = 2
输入:c1='\135',c5='173'
输出:c1 = ],c5 = 3
由上可以看出:有反斜杠的才被当作是字符,且被转义成为比实际上ASCII码小 36 ~ 42 的字符;没有反斜杠的被当作是一串数字,赋值时只接收最后一个
页:
[1]