面试题

 

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 判断字符串结束的标志是指针走到值为 '\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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值