详解strlen和sizeof在数组中的使用(三)
目录
题目二:
一、前言
前面我们使用了sizeof的使用,那么现在我们开始strlen的使用,对于strlen我们都知道,
只能用来计算字符串的长度。strlen计算的是字符地址,如果传的是字符则会出错。
strlen只有检测到'\0'才会停下。
二、有关strlen的常见试题
题目一:
第一题 strlen(arr),arr是首元素地址,strlen(arr)表示从首元素地址开始计算,到末尾的'\0'停
止,所以结果是6字节。
第二题strlen(arr+0),arr+0也表示元素地址,所以是6字节。
第三题strlen(*arr),*arr表示拿到了首元素,因为不是地址,所以会出错。(程序不向下运行
了)。
第四题strlen(arr[1]),arr[1]表示第二个元素,解释同上,出错。
第五题strlen((char*)&arr),&arr拿到整个数组的地址,因为数组的地址,所以它的类型是
数组指针类型char(*)[7],而strlen的类型是char*,在运行时会报警告类型不兼容,所以我们
强制类型转化成char*,因为是数组的地址,所以大小是6字节。
第六题strlen((char*)&arr+1),&arr+1,跳过数组的地址,指向下一块空间,要找到'\0'
才会停,因为不知道'\0'在什么位置,所以大小是随机值。
第七题strlen(&arr[1]+1),&arr[1]拿了第二个元素的地址,再&arr[1]+1拿到了第三元素的
地址,所以计算大小的时候从第三往后算为4字节。
答案:
这个是strlen不是sizeof所以跟多少为平台无关。
题目二:
此种题万能解析:对于没有\0的数组用strlen求的都是随机值(是地址的前提),如果也是传的元素,那么也会出错,所以不用说了吧。
数组不是字符串而是单的字符的情况。传址的都是随机值,传值的都是错误的,所以前三个
是随机值,后两个是error的。
下篇见,咱们下次一定
- 点赞
- 收藏
- 关注作者
评论(0)