详解sizeof和strlen


前言

在c语言中我们在求解字符串和字符数组长度时候总会用到两个关键字sizeof和strlen。我是很容易把他们搞错所以我在这给记录下来他们的使用。这里普通的大家都知道,我这里主要对象是数组。


一、计算机中的单位

在计算机中,计算机可读入的是含有二进制的数也就是只包含1和0这两个数字,当我这里二进制位有一个0或者1要存储的时候,如下图,我们这里需要存储二级制位1,计算机给它开辟了一个空间,我们把存储一个数字1的单位叫做计算机的最小单位:bite(比特位),8个比特位构成一个字节(byte)。
请添加图片描述

二、sizeof的使用

1,sizeof代码使用方法

代码如下(示例):

#define  _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
int main()
{
	printf("%d\n", sizeof(char));
	printf("%d\n", sizeof(short));
	printf("%d\n", sizeof(int));
	printf("%d\n", sizeof(long));
	printf("%d\n", sizeof(long long));
	printf("%d\n", sizeof(float));
	printf("%d\n", sizeof(double));
	return 0;
}

2.sizeof定义

1,sizeof是一个单目操作符,它是求取操作数的类型长度/变量所占内存空间的大小(以字节为单位),它不关注内存中存放的具体内容,也就是他求数组的时候不管数组里面有没有’ \0 '。记住千万不要搞混 ,sizeof不是函数!
2,对于普通的sizeof求解就如上方代码所示,对于sizeof的用法还有一个就是计算数组的大小,元素个数,一个元素所占的空间大小

#define  _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
int main()
{
	//定义一个整型数组,里面有十个元素
	int arr[10] = { 0 };   
	//求出来值40  计算的是整个数组的大小,单位是字节
	printf("%d\n",sizeof(arr));   
	//求出来值4  求一个元素所占的空间
	printf("%d\n", sizeof(arr[0]));  
	//用它整个数组大小除以他一个元素所占空间大小得出他的元素个数
	printf("%d\n", sizeof(arr) / sizeof(arr[0]));   
	return 0;
}

3,这里最容易搞混的就是字符数组了,在这里先讲解三个混淆概念:数字0,字符0,和’\0’。字符’0’它的ASCII的值是48,'\0’它的ASCII值是0。
在这里用代码来表示:

#define  _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
int main()
{
	char arr1[5] = "abcd";
	char arr2[] = { 'a','b','c','d' };
	char arr3[] = { 'a','b','c','d',0 };
	char arr4[] = { 'a','b','c','d','0'};

	printf("%s\n", arr1);
	printf("%s\n", arr2);
	printf("%s\n", arr3);
	printf("%s\n", arr3);
	return 0;
}

运行结果:
请添加图片描述
注:字符串的结束标志是一个\0的转义字符,在计算字符长度的时候\0是结束标志,不算作字符内容。

三,strlen的使用

1,strlen代码使用方法

代码如下(示例):
注意:strlen在测字符串长度时候遇到’\0’,结束

#define  _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>  
#include<string.h>  
int main()  
{
	char arr1[] = "abcd";  
	char arr2[] = { 'a','b','c','d' };  

	int len1 = strlen(arr1);  
	int len2 = strlen(arr2);  
	printf("%d\n", len1);  
	printf("%d\n", len2);  

	return 0;  
}

2,strlen定义

strlen是一个求字符串长度的一个库函数,注意只是求字符串长度的一个函数,只针对字符串,不能求其他类型变量的长度! 它在使用求解字符串长度的时候,从参数给定的位置一直向后寻找’\0’,统计’\0’之前出现字符的个数。它的头文件是string.h,在使用的时候需要对它进行包含头文件。

在这里插入图片描述

三,strlen和sizeof的区别

1,sizeof是运算符,是一个单目操作符,而strlen是c语言标准库函数

2,strlen测量的只是字符串的实际长度,以’\0’结束,返回结果不包括’\0’。而sizeof测量的是字符的总元素的空间大小,包括’\0’转义字符的单位大小,他的参数可以是数组,指针,类型,对象,函数等等。具体而言当参数分别如下时,sizeof返回的值含义如下:

1,数组-编译时分配的数组空间大小;
2,指针-存储该指针所用的空间大小;
3,类型-该类型所占的空间大小:
4,函数-函数返回类型所占空间的大小;

在初阶学习,最容易搞混的就是它的求取返回值,这里代码来表示一下吧:

在这里插入图片描述
字符串里面有五个字符分别是’a’,‘b’,‘c’,‘d’,‘\0’;由此可以看出sizeof在求数组大小时候把’\0’的所占空间大小也算进去了,也就是sizeof的返回值里面包括’\0’,而strlen在求字符串长度的时候,不返回’\0’;


总结

例如:以上就是今天要讲的内容,本文仅仅介绍了strlen和sizeof的使用和混淆的错误,特别是求解字符串的时候。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值