C语言高手来看下

来源:百度知道 编辑:UC知道 时间:2024/06/05 04:34:47
main()
{
char ch;
ch='\80';
printf("%c",ch)
}
我以为80是8进制的,换算成10进制是64,对应的AS码是@,但是结果输出是8。我把80~89都试过了。输出结果都是8。更意外的是,换成90到99之间的事,输出的全是9。。但是如果换成其他数时,就会正确的输出对应的AS码。这到底是怎么回事。我问过朋友,他说他学的是C++,他的理解这样说:“应该是这样%c表示是接受值将其作为字符串并打印字符串中的第一个字符
所以\80和\85的第一个字符都是8
所以输出的是8
出了这个,我想不出其他的”
要按他那样说,换成其他的数,如:31啊,45, 64等等,输出结果应该是3,4,6。但结果不是。
哪位高手能解释下

ch='\80';

楼上的那位说得不对,这里的'\80'中,由于 \8 不是一个合法的转移序列,因此,\被忽略(编译器通常会给出警告信息),而后面的'80'被保留下来。糟糕的是,'80'不是一个合法的ascii字符,而是一个多字节字符。当这个多字节字符赋值给一个单字节变量ch时,发生截断,结果ch得到的是最低1个字节或最高1个字节(取决于具体编译器和cpu的字节序了,不过更糟糕的,有的编译器就认为80是8进制的!),也就是0或8.因此输出结果是0或 8.

gcc 4.3的输出是 0.

你的朋友回答正确的。
char ch;
ch只能存一个字符。

ch='\80' 想想8进制,会出来80吗?
存入的是'\8',就是8