关于C语言在MinGW Developer Studio下的'\数字'格式

来源:百度知道 编辑:UC知道 时间:2024/06/23 01:49:40
谁能解释一下为什么在用printf输出\0,\1,\2,\3,\4,\5,\6,\7,\8,\9等时的结果很奇怪,一些是数字、一些是特殊符号,在用strlen时\0,\1,\2,\3,\4,\5,\6,\7,\8,\9等的长度是如何算的???求\111,\911,\119的长度时,为何都不一样???

在C语言中,以'\'开始的字符只能用于字符串常量,称作ESC序列。像常见的\n就是。其次是\x, 如\x41表示ASCII为十六进制的41,即大写字符'A'; 再其次是\t,\\,\"; 其他还有很少用的\v,\b,\r,\f,\a等等.
\后面直接带数字,则是用八进制表示字符。如\12表示ASCII的10(\x0a),也就是'\n'; \111表示ASCII的73(\x49),即'I'.
因此,'\0'是一个字符,如果用strlen("\0")应该得到0; '\12', '\111'都各是一个字符,strlen("\111")应该得到1;'\119'则是两个字符,一个是'\11', 一个是'9' (C语言看到不属于8进制的字符时则认为8进制字串结束), strlen("\119")应该得到2.
而'\911'编译时应该报错误,因为9不属于8进制数字字符。但也有的编译器会忽略'\', 认为是'911'三个字符,strlen返回3; 另外,像'\1112'有的编译器认为是'\111'和'2'两个字符,strlen返回2,有的编译器则认为数值超出范围而报错。
用八进制表示字符一般用于串并口的通信,特别是和打印机通信。其他场合很少见。

在下初学C语言
对阁下提的问题,在下提出自己的想法,仅仅是在下的猜想,
printf语句里的转义字符只能用于十六进制数和八进制数,阁下的输入的几个转义字符是几进制尼?八进制数里面怎么可能会有九尼?
十六进制数的话,应该加前导'\0X'才对!~~
这仅仅是一