【C语言之区分sizeof 和 strlen】

文章详细介绍了C语言中的sizeof运算符和strlen函数,包括它们的用途、返回值类型和计算方式。sizeof用于获取变量或类型占用的内存大小,而strlen计算的是字符串的长度,不包含终止符。两者在处理数组和字符串时有显著区别,sizeof能返回静态数组的总大小,但无法处理动态分配的数组,而strlen只适用于以结尾的字符串。
摘要由CSDN通过智能技术生成

详解C语言sizeof 和 strlen

前言:
首先,我们需要明白它们的根本区别,sizeof属于关键字也属于单目操作符,而strlen属于库函数

/知识点回顾/

1、单目操作符

单目操作符:单目运算符对应只有一个操作数
常见的单目操作符:

常见的单目操作符描述
逻辑非
’ - ‘
’ + ‘
&取地址
sizeof计算一个数据类型的大小
~取反
减减
++加加
’ * ’解引用
( )强制类型转换

1.1、详解sizeof单目操作符

先大概看一下关于sizeof的技术文档

sizeof expression

The sizeof keyword gives the amount of storage, in bytes, associated,with a variable or a type (including aggregate types).
This keyword,returns a value of type size_t.
The expression is either an identifier or a type-cast expression (a type specifier enclosed in parentheses).
When applied to a structure type or variable, sizeof returns the actual size, which may include padding bytes inserted for alignment.
When applied to a statically dimensioned array, sizeof returns the size of the entire array.
The sizeof operator cannot return the size of dynamically allocated arrays or external arrays.

说明

运算符表达式sizeof关键字给出与变量或类型(包括聚合类型)相关联的存储空间(以字节为单位)
该关键字返回size_t类型的值
表达式要么是标识符,要么是类型强制转换表达式(用圆括号括起来的类型说明符)。
当应用于结构类型或变量时,sizeof返回实际大小,其中可能包括为对齐而插入的填充字节。
当应用于静态维度数组时,sizeof返回整个数组的大小
sizeof操作符不能返回动态分配的数组或外部数组的大小

小结
sizeof的功能是计算一个数据类型的大小,这个类型可以是数组、函数、指针、对象等,单位为字节,它的返回值是size_t类型,也就是unsigned int类型,是一个无符号整数。
注意:sizeof不是一个函数,它是一个运算符,所以它不需要包含任何头文件。

1.2、sizeof代码部分

接下来通过代码例程分解sizeof各个知识点:
1.返回size_t类型的值,sizeof返回实际大小,可能包括为对齐而插入的填充字节
2.当应用于静态维度数组时,sizeof返回整个数组的大小
3.sizeof操作符不能返回动态分配的数组或外部数组的大小

1.2.1、sizeof例程1

说明
返回size_t类型的值(无符号整型),sizeof返回实际大小,可能包括为对齐而插入的填充字节(如:空格)

/*例程1*/
#include <stdio.h>
int main()
{
	printf("size_t1 = %d\n", sizeof(int));//sizeof参数可以是类型,这里返回的就是int型字节大小
	int a = 10;
	printf("size_t2 = %d\n", sizeof(a));//计算a所占用的空间大小,单位是字节,且a为整型变量
	char b = 'B';
	printf("size_t3 = %d\n",sizeof(b));//计算a所占用的空间大小,单位是字节,且b为字符型变量
	char arr1[] = "hello";
	printf("%d\n",sizeof(arr1));
	//计算包括为对齐而插入的填充字节(如:空格)
	char arr2[] = "h e l l o";
	printf("%d\n", sizeof(arr2));
	return 0;
}

如图所示

在这里插入图片描述

1.2.2、sizeof例程2

说明
当应用于静态维度数组时,sizeof返回整个数组的大小

/*例程2*/
#include <stdio.h>
int main()
{
	char arr[10] = { 0 };
	//计算arr数组元素所占用的空间大小,单位是字节
	printf("%d\n", sizeof(arr[1]));//1

	printf("%d\n", sizeof(arr));//10---char数组字节1---10个就是1*10 = 10
	//同理:int类型那么就是10*4 = 40
	return 0;
}

如图所示
在这里插入图片描述

1.2.3、sizeof例程3

说明
sizeof操作符不能返回动态分配的数组或外部数组的大小(特别易错)

/*例程3*/
#include <stdio.h>
int main()
{
	short a = 5;
	int b = 10;
	printf("%d\n", sizeof(a = b + 2));//输出2 ---- 单位字节,仍为short类型
	//注意:小的空间内存放不进比它大的数据,会数据截断,仍为short类型,a+2也不会运算
	//且sizeof(参数),参数的计算不对参数外起作用
	printf("%d\n", a);//输出5 ---- a+2也不会运算

	int arr1[] = { 1,2,3,4 };
	int arr2[] = { 1, 2, (3, 4), 5 };
	//注意:这里的(3,4)是逗号运算符,计算结果作为数组的元素,数组类型相同元素个数相同,所以字节空间大小相同
	printf("%d\n", sizeof(arr1));//16
	printf("%d\n", sizeof(arr2));//16
	return 0;
}

如图所示
在这里插入图片描述

2、详解strlen函数

老规矩先看一下关于strlen函数的技术文档:
在这里插入图片描述
说明

Return Value

Each of these functions returns the number of characters in string,
excluding the terminal NULL. No return value is reserved to indicate an error.
原型:size_t strlen( const char *string );

小结
1.返回类型仍然是size_t类型,参数为字符串类型,const是修饰为不可改变的变量
2.strlen的功能是计算一个指定字符串的长度,函数原型是size_t strlen(const char *s),它的返回值是size_t类型,也就是unsigned int类型,返回的是字符串的长度
3.需要包含头文件#inlude <string.h>,参数s是字符串首地址

注意:strlen的结果要在运行的时候才能计算出来,是用来计算字符串的长度,不是类型占内存的大小,不包括’\0’。strlen是不会计算’\0’之后的长度的。

2.1、strlen代码部分

接下来通过代码例程了解strlen知识点:
1.返回size_t类型的值,strlen返回字符串长度

2.1.1、strlen例程1

说明
返回size_t类型的值,strlen返回字符串长度

/*例程1*/
#include <stdio.h>
#include <string.h>
//使用strlen函数,需要调用头文件 ---- <string.h>
int main()
{
	char arr[] = "hello";
	printf("%d\n",strlen(arr));//计算字符串长度,不包括'\0'
	return 0;
}

如图所示
在这里插入图片描述

3、区别strlen函数和sizeof操作符

小结
a、sizeof会将空字符\0计算在内,而strlen不会将空字符\0计算在内。
b、sizeof是操作符(关键字),它结果类型是size_t,它在头文件中typedef为unsigned_int类型,而strlen是函数。
c、sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以’‘\0’'结尾的。

3.1、sizeof( )和strlen( )的运用例程1
/*例程1*/
#include <stdio.h>
#include <string.h>
int main()
{
	char str[] = "hello bit";
	//hello bit\0
	printf("%d %d\n", sizeof(str), strlen(str));//10 9
	//strlen()函数求字符串长度
	//sizeof关键字计算变量/类型所占用的内存大小,单位字节
	return 0;
}

4.结束语

相信看到这里大家对于strlen是什么?和sizeof是什么?有了更加深入的理解了,如果对你有所帮助,不要客气一件三连哦让更多人阅读,谢谢您勒!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值