C语言|用 sizeof 和 strlen 计算字符数组的大小

一、引言

当要计算一个数组的大小的时候,有两种常见的方式,一种是直接使用运算符sizeof,另一种是使用< string.h >头文件下面的 strlen() 的函数。

二、字符数组不同的定义方法

字符数组的定义方法大致有三种:第一种是已知数组大小用单引号初始化;第二种是未知数组大小用单引号初始化;第三种是未知知数组大小用双引号初始化

    char arr0[10] = { 'a','b','c','d','e','f','g','h','i','j' };
	char arr2[] = { 'a','b','c','d','e','f','g','h','i','j' };
	char arr4[] = "abcdefghij";

 因为sizeof是直接计算从数组首地址到 ‘\0’ 之间的大小,而strlen是计算有效字符的长度,因此设置了一个对照字符数值。

	char arr0[10] = { 'a','b','c','d','e','f','g','h','i','j' };
	char arr1[10] = { 'a','b','c','d','e','\0'};	//对照
	char arr2[] = { 'a','b','c','d','e','f','g','h','i','j' };
	char arr3[] = { 'a','b','c','d','e','f','g','h','i','j','\0'};	//对照
	char arr4[] = "abcdefghij";

三、sizeof的基本用法

因为sizeof是运算符,所以它的用法需要经过一定的转换。否则它会直接算出字节数的多少。

        sizeof(arr0) / sizeof(arr0[0])

        arr0:这个为数组的首地址。先计算整个字符串的大小。

        arr0[0]:这个为单个数组地址。计算单个字符的大小。

经过这两数相除就能得到该字符串的大小。

	int len0 = sizeof(arr0) / sizeof(arr0[0]);
	int len1 = sizeof(arr1) / sizeof(arr1[0]);	//对照
	int len2 = sizeof(arr2) / sizeof(arr2[0]);
	int len3 = sizeof(arr3) / sizeof(arr3[0]);	//对照
	int len4 = sizeof(arr4) / sizeof(arr4[0]);

四、strlen的基本用法

strlen用法就相对简单,本质上是一种函数的调用,直接把要计算的数组首地址传入就能完成对字符串大小的计算。

	int len00 = strlen(arr0);
	int len01 = strlen(arr1);	//对照
	int len02 = strlen(arr2);
	int len03 = strlen(arr3);	//对照
	int len04 = strlen(arr4);

五、代码

最后,把上面代码的结果输出,就能得到如下图中的结果。完整代码如下 :

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
	char arr0[10] = { 'a','b','c','d','e','f','g','h','i','j' };
	char arr1[10] = { 'a','b','c','d','e','\0'};	//对照
	char arr2[] = { 'a','b','c','d','e','f','g','h','i','j' };
	char arr3[] = { 'a','b','c','d','e','f','g','h','i','j','\0'};	//对照
	char arr4[] = "abcdefghij";

	int len0 = sizeof(arr0) / sizeof(arr0[0]);
	int len1 = sizeof(arr1) / sizeof(arr1[0]);	//对照
	int len2 = sizeof(arr2) / sizeof(arr2[0]);
	int len3 = sizeof(arr3) / sizeof(arr3[0]);	//对照
	int len4 = sizeof(arr4) / sizeof(arr4[0]);

	int len00 = strlen(arr0);
	int len01 = strlen(arr1);	//对照
	int len02 = strlen(arr2);
	int len03 = strlen(arr3);	//对照
	int len04 = strlen(arr4);

	printf("arr0数组大小分别为:%d %d\n", len0,len00);
	printf("arr1数组大小分别为:%d %d\n", len1, len01);	//对照
	printf("arr2数组大小分别为:%d %d\n", len2,len02);
	printf("arr3数组大小分别为:%d %d\n", len3, len03);	//对照
	printf("arr4数组大小分别为:%d %d\n", len4,len04);
	return 0;
}

 六、总结

从结果中会发现,当固定了数组大小使用sizeof计算时结果就是该数组已知的大小。

当用单引号时,在结尾未加 ‘\0’ 的情况下,使用strlen()得到的结果并非是该数组的正确长度。strlen()会一直寻到 ‘\0’ 为止,而sizeof则会把 ‘\0’ 也算进来。

在计算字符数组下标的时候,需要根据不同的情景和需求来求大小。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值