首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >sizeof计算数组元素个数、strlen函数相关的一些知识点以及两者的区别

sizeof计算数组元素个数、strlen函数相关的一些知识点以及两者的区别

作者头像
艾莉丝努力练剑
发布2025-11-12 19:12:08
发布2025-11-12 19:12:08
2270
举报
文章被收录于专栏:C / C++C / C++

前言:本文是作为专栏内容的知识补充,也会放在《C语言》的专栏里面,有兴趣的友友们可以看看,笔者会在专栏更新C语言的学习笔记、常见问题解析!

传送门:C语言

说明:在c语言中我们在求解字符串和字符数组长度时候总会用到两个关键字sizeof和strlen。这两个很容易把他们搞错,因此笔者在这介绍一下这两者使用区别与注意事项。这里主要对象是数组

计算机中的单位

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

一、sizeof计算数组元素个数

在遍历数组的时候,我们经常想知道数组的元素个数,那C语言中有办法使用程序计算数组元素个数吗?我的回答是:有的兄弟有的,可以使用sizeof

sizeof 中C语言是⼀个关键字,是可以计算类型或者变量大小的,其实 sizeof 也可以计算数组的 大小。比方说:

代码语言:javascript
复制
#include <stido.h>

int main()
{
 int arr[10] = {0};
 printf("%d\n", sizeof(arr));
 return 0;
}

这里输出的结果是40,计算的是数组所占内存空间的总大小,单位是字节,也就是8个bit。

我们知道数组中所有元素的类型都是相同的,那只要计算出一个元素所占字节的个数,数组的元素个数就能算出来。这里我们选择第一个元素算大小就可以。

代码语言:javascript
复制
#include <stido.h>

int main()
{
 int arr[10] = {0};
   printf("%d\n", sizeof(arr[0]));//计算⼀个元素的⼤⼩,单位是字节 
 return 0;
}

接下来就能计算出数组的元素个数:

代码语言:javascript
复制
#include <stido.h>

int main()
{
 int arr[10] = {0};
 int sz = sizeof(arr)/sizeof(arr[0]);
    printf("%d\n", sz);
 return 0;
}

这里的结果是:10,表示数组有10个元素。

再比如说:

代码语言:javascript
复制
#include<stdio.h>
int main()
{
    //sizeof计算占用内存空间大小时,会计算'\0'的大小
	int arr1[10]={1,2,3,4,5};
	char arr2[]="hello";//字符串后默认有个'\0'
	char arr3[]={'h','e','l','l','o'};//字符后没有'\0'
    int arr4[]={0};
	  printf("%d\n",sizeof(arr1));
	  printf("%d\n",sizeof(arr2));
	  printf("%d\n",sizeof(arr3));
	  printf("%d\n",sizeof(int));
	return 0;
 } 

以后在代码中需要数组元素个数的地方就不用固定写死了,使用上面的计算,不管数组怎么变化,计算出的大小也就随着变化了。

二、strlen函数

1、strlen代码使用方法 代码如下:
代码语言:javascript
复制
​
#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;  
}

​

注意:strlen在测字符串长度时候遇到’\0’,结束。

2、strlen定义

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

三、C语言中strlen与sizeof的区别

1.sizeof是一个运算符号,是一个单目操作符strlen作为C语言标准库函数,使用需要包含头文件<string.h>;

2.strlen计算的是'\0'之前的字符个数,sizefo计算的是所占空间内存的大小,单位是字节(bit);

3.strlen计算时不包含'\0',而sizeof包含'\0',若sizeof计算结果是n,那strlen计算的结果就是n-1;

4.strlen遇到'\0'才结束——

针对3、4的详解:strlen测量的只是字符串的实际长度,以’\0’结束,返回结果不包括’\0’。统计的是 \0 之前字符的个数,而sizeof测量的是字符的总元素的空间大小,包括’\0’转义字符的单位大小,其参数可以是数组、指针、类型、对象、函数等等;

5.sizeof的类型是unsigned int ,是一个无符号的整型;

6.strlen只能用char做参数,sizeof可以用类型做参数;

7、sizeof只关注占用内存空间的大小,不关注内存中存放什么数据;strlen关注内存中是否有 \0 ,如果没有 \0 ,就会继续往后找,有可能会越界。

注意: 在文章中已经介绍了sizeof和strlen的区别和使用方法,需要我们特别注意的是:srtlen只有在遇到'\0'时,才会结束,就是只计算'\0'之前的字符,所以我们在使用时一定要记得加上'\0';在使用sizeof时,我们必须要记住,数组名是首元素地址,有两个除外——

1、sizeof(数组名),计算的是整个数组的大小,单位是字节(8个bit);

2、&数组名,表示的是整个数组的地址——如果不加&,光数组名是数组的首元素地址,它们之间的不同点就是跨度不一样。

总结:

这就是本篇的全部内容了,本文主要介绍了sizeof计算数组元素个数、strlen函数相关的一些知识点以及两者的区别,如果友友们有什么想法,可以在评论区交流一下。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 计算机中的单位
  • 一、sizeof计算数组元素个数
  • 二、strlen函数
    • 1、strlen代码使用方法 代码如下:
    • 2、strlen定义
  • 三、C语言中strlen与sizeof的区别
  • 总结:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档