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