关于strlen()和sizeof的题目

来源:互联网 发布:软件接口开发 编辑:程序博客网 时间:2024/05/22 00:38
1、char test[] = {0x01,0x02,0x03};int a = strlen(test);int b = sizeof(test);2、char test[] = {0x01,0x00,0x03};int a = strlen(test);int b = sizeof(test);3、char test[20] = {0x01,0x02,0x03};int a = strlen(test);int b = sizeof(test);4、char test[20] = {0x01,0x00,0x03};int a = strlen(test);int b = sizeof(test);//以上题目中的a、b分别是多少,


 

 

 

 

strlen() 返回字符串长度, sizeof 返回变量所占内存字节数

strlen 判断字符串结束的标志是指针走到值为 '\000' 的地址处,然后返回长度
sizeof 是在编译时就决定了变量所占的内存大小,它肯定是一个定值

'\000' 在十六进制里的表示就是 0x00

第一题:
a:
因为 test字符数组里没有 0x00 或者 '\000',所以返回一个随机数,我是通过gdb调试发现的,而且我让周围的朋友运行了一下,也发现不同的机器,跑出来的 strlen(test) 的值是不一样的,因为在test[]里没有'\000',所以指针会在内存空间里一直向后走,直到碰到'\000'时返回

a的值是个随机数,每台机器都不一样,不是个定值

b:
test数组指向的内存空间是3个字节,所以返回3
b=3


第二题:
a:
因为test字符数组第二个字符就是0x00,也就是'\000',所以,运行strlen的时候,运行到第二个字符时就返回了
a=1

b:
跟第一问的b相同
b=3


第三题:
a:
定义了一个长度为20的字符数组test, char test[20] = {0x01, 0x02, 0x03};
这样定义的结果是,test数组前三位是十六进制的 0x01, 0x02, 0x03,后面的17个数字就都是0x00
所以,strlen运行时碰到第一个0x00,也就是第4位数字的时候就返回了
a=3

b:
因为声明时就定义了这个字符数组的长度是20,所以b=20


第四题:
a:
跟第二题的原理相同
a=1

b:
跟第三题的原理相同
b=20

 

原创粉丝点击