\ddd和\xddd 转义序列

转自  http://blog.csdn.net/todd911/article/details/8851475

书中有如下描述:

\ddd  ddd表示1~3个八进制数字,这个转义符表示的字符就是给定的八进制值所代表的字符

\xddd 与上例类似,只是八进制数换成了16进制数。

注意,任何十六进制数都有可能包含在\xddd序列中,但如果结果值的大小超过了表示的字符范围,其结果就是未定义。 

问题:

为什么只说了\xddd呢,那\ddd,如果超过了表示字符的范围,会怎样呢。

于是做了如下测试:

 

#include <stdio.h>    
int main(void){  
    printf("\x123456\n");  
    return 0;  
}  

 

编译后报如下警告:

 

printf.c: In function 'main':
printf.c:4:9: warning: hex escape sequence out of range [enabled by default]

运行后输出:

V

猜测计算机将\x1234看成了整体,因为超出了255,而无法显示,16进制的56在ascii中正好是V。 

再进行如下测试:

 

#include <stdio.h>    
int main(void){  
    printf("\123456\n");  
    return 0;  
}  

编译无error和warning 

运行后结果为:

S456

其中8进制123在ascii中正好是S,456不进行翻译。

可见计算机对8进制和16进制的转义符处理是不一样的。

posted @ 2015-06-27 10:35  neteasefans  阅读(972)  评论(0编辑  收藏  举报