转义字符的多种情况理解

来源:互联网 发布:js打开微信浏览器跳转 编辑:程序博客网 时间:2024/06/16 06:43

. strlensizeof的意义

sizeof是C/C++中的一个关键字,不是函数,简单的说其作用就是返回一个对象或者类型所占的内存字节数。

strlen()是一个函数,求一个字符串的有效长度,strlen函数的结束条件是遇到\0结束计数。

.sizeof求一个字符串分为几种情况:

A.\后面一般跟的是八进制数如 \000   \377   \378

B.\也可跟16进制如\x11   \xff

C.\后面跟的字符如\a  \A  \8

如下字符串举例:

"\0000"   可以看成\000   0    \0  ,sizeof 值为3,第一个\000代表ascii第一个元素(NULL空操作),第二个0是字符0,最后红色的\0是系统自带\0(他实际也是\0,\00,\000 也就是ASCII所代表的第一个元素NULL)用于结束字符串。所以sizeof就是3

 

"\3770" 可以看成\377   0    \0 ,sizeof 值为 3,第一个代表\377(注意此时的377是一个8进制数转换成十进制是255,刚好是一个字符所能表示的最大数字,一个字符占一个字节,一字节= 8位,每一位可用01表示,所以一个字符所能表示的最大范围是2^8=256  0~255), 第二个0是字符0,最后红色的\0是系统自带\0(他实际也是\0,\00,\000 也就是ASCII所代表的第一个元素NULL)用于结束字符串。所以sizeof就是3

 

"\378"  可以看成\37   8  \0 , sizeof值为3,如果\后面没有x(注意是小写x,大写X的话是算字符X),所以\378就是八进制,但是八进制怎么可能出现8呢? 所以真确理解方式应该是   \037     8    \0  ,第一个\037代表ASCII第37个元素,第二个8是字符8,第三个\0是系统自带,所以sizeof就是3

 

"\444"  此时在VS下编译不会通过,提示你, 有人会问那为什么现在不可以看成 \44   4   \0, 八进制44没有超过十进制255啊? 因为vs下面\后面三个数字为一个整体,如果这三个数里面有超过7的数,便于理解就像上面提到的"\378",可以看成\037 8 \0  在Linux下会有警告:八进制数超过范围,但是Linux会编译通过sizeof为2(原因是Linux只取了低位一个字节)

 

"\xff"   \后面跟了小写x说明是一个16进制的数,可以理解为\xff(\255)   \0  两个字符。

 

"\x0000001g1"  这是说明是一个16进制数,此时都是x后面的数都应该计算进去,而不能像八进制那样只看后三位,该字符串可以看成\x0000001(\0)   g    1   \0  共四个字符。

 

"\x000000ffff"   此时在VS下面不能编译通过,因为十六进制ffff转换成十进制早已经大于255了。    在Linux有警告sizeof为2

"\A1x"    在计算机中存储是\65   1  x     \0四个字符存储  。

三:正确理解"\8" "\7"

"\8"   就是字符8 可以看成\56,    因为\后面既不是八进制数,也不是十六进制数所以他就是一个字符8,它的ASCII编码是56,

对比"\7" 理解转义字符\,  \7可以看出其后面是一个八进制数,所以他是ASCII为7 所对应的的元素

\8就是字符8, \7不是字符7而是ASCII7所对应的元素

到这里就可以理解转义字符\的含义了:就是把ASCII编码转换成该编码所对应的字符。

 

四;正确理解\A    \000   以及 字符 0

\A    相当于\65    而ASCII编码号为65 所对应的字符就是  A,   所以\A代表的就是字符'A'

 

\000  相当于\0   \00  \000 \x0000000000    而ASCII编码号为0 所对应的字符就是 NULL  空操作,也是字符串的结束标志。(注意:\0  不是字符0,\48才代表的是字符0,  但是\8就是字符8,原因上面讲过)

 

0     它是字符'0', 而该字符所对应的ASCII编码是48       它与\0不一样!!!