详解strlen和sizeof在数组中的使用(三)

举报
执久呀 发表于 2022/02/18 12:28:36 2022/02/18
【摘要】 ​  目录一、前言二、有关strlen的常见试题题目一:答案:​题目二:一、前言前面我们使用了sizeof的使用,那么现在我们开始strlen的使用,对于strlen我们都知道,只能用来计算字符串的长度。strlen计算的是字符地址,如果传的是字符则会出错。strlen只有检测到'\0'才会停下。二、有关strlen的常见试题题目一:#include<stdio.h>#include<str...

  目录

一、前言

二、有关strlen的常见试题

题目一:

答案:​

题目二




一、前言

前面我们使用了sizeof的使用,那么现在我们开始strlen的使用,对于strlen我们都知道,

只能用来计算字符串的长度。strlen计算的是字符地址,如果传的是字符则会出错。

strlen只有检测到'\0'才会停下。



二、有关strlen的常见试题


题目一:

#include<stdio.h>

#include<string.h>

int main()
{
	char arr[] = { "abcdef" };

	printf("%d\n", strlen(arr));

	printf("%d\n", strlen(arr+0));

	//printf("%d\n", strlen(*arr));//出错

	//printf("%d\n", strlen(arr[1]));//出错

	printf("%d\n", strlen((char*)&arr));	

	printf("%d\n", strlen((char*)&arr+1));

	printf("%d\n", strlen(&arr[1]+1));

	return 0;

}

第一题 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所以跟多少为平台无关。




题目二:


#include<stdio.h>

#include<string.h>
int main()
{
	char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
	printf("%d\n", strlen(arr));

	printf("%d\n", strlen(arr+0));

	printf("%d\n", strlen(&arr));

	printf("%d\n", strlen(*arr));

	printf("%d\n", strlen(arr[1]));

	return 0;
}

此种题万能解析:对于没有\0的数组用strlen求的都是随机值(是地址的前提),如果也是传的元素,那么也会出错,所以不用说了吧。

数组不是字符串而是单的字符的情况。传址的都是随机值,传值的都是错误的,所以前三个

是随机值,后两个是error的

下篇见,咱们下次一定


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。