一. strlen与sizeof的意义
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而是ASCII为7所对应的元素
到这里就可以理解转义字符\的含义了:就是把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不一样!!!
来源:CSDN
作者:littesss
链接:https://blog.csdn.net/littesss/article/details/72782954