【C语言】sizeof和strlen的区别【详解】

简介: 【C语言】sizeof和strlen的区别【详解】

一.sizeof和strlen的主要区别



1.sizeof运算符,而strlen 是C语言库函数中的一个函数(使用时包含头文件(string.h))

对于sizeof来说,使用时不加()也是正确的,这样也可以说明sizeof不是函数

2.sizeof 操作符用于计算变量或类型的大小,一般单位为字节,通常用于计算内存大小。

3.strlen是计算字符串长度的,遇到\0结束,返回不包括\0,即如果没有\0则会计算出随机值;


二.sizeof和strlen分别讲解(含例题和详解)



1.sizeof


在计算字符型数组时(例题+讲解)


如代码:char  arr1 []="hello bite!"  因为字符串末尾会自动添加\0作为结束标志 所以这个字符串实际是 “hello  bite!\0” 其中一个字符占一个字节,空格和\0也各占一个字节 一共就是12个字节;

代码:

int main()
{
  char arr[] = "hello bite!";
  int ret = sizeof(arr);
  printf("%d\n",ret);
  return 0;
}


运行结果是:

09562d4264de480691974124be9ee0bb.png


计算整型数组(例题+讲解)


如代码:int arr2 [5]={0};因为是整型,所以一个元素占4个字节(一个整型所占大小);数组大小就是   元素个数×4   即arr2所占大小是5×4=20个字节

代码:

int main()
{
  int arr[5] = { 0 };
  int ret=sizeof(arr);
  printf("arr所占内存大小为:%d字节\n",ret);
  return 0;
}


运行结果:

8d80666cb43f433f94ffd9d949887177.png


2.strlen


3.strlen是计算字符串长度的,遇到\0结束,返回不包括\0,即如果没有\0则会计算出随机值;


例子一(讲解)


char arr[]="abcdefg";   实际字符串内容为 "abcdefg\0" 即strlen所计算的是\0之前的"abcdefg",即算出字符串长度为7个字符;

#include <string.h>
int main()
{
  char arr[] = "abcdefg";
  int len = strlen(arr);
  printf("字符串长度为:%d个字符\n",len);
  return 0;
}


运行结果:

2f49a2b04afe4a41a4414007867f14fb.png


例子二(讲解)


char arr[]={ 'a' , 'b' , 'c', 'd' , 'e' , 'f' , 'g' };  该字符数组中放入的是 a b c d e f g 这7个字符;因为不是字符串,所以末尾没有\0;没有\0,当使用strlen函数进行计算是就不知道在哪里结束;计算结果就是我们想不到的随机值(如下面的运行结果14028835)意思是当使用strlen函数进行计算时,当计算完arr数组时,因为没遇到\0,所以还要继续往后计算,(这里直到计算了14028835个字符后)才遇到\0结束;


代码:

#include <string.h>
int main()
{
  char arr[] = { 'a','b','c','d','e','f','g' };
  int len = strlen(arr);
  printf("arr的长度为:%d字符\n");
  return 0;
}


运行结果:

639f73123f864b58a5ee445e8aa2b9f8.png


三.典型例题



例1

3799fae9941443b38cc5c64e48b01791.png


答案解析:


str字符数组使用"hello bit"初始化,最终也会将'\0'放置到数组中,因此数组中总共有10个元素

sizeof(str):获取数组的总大小,10个元素,每个元素占1个字节,因此总共是10个字节

strlen(str): 获取字符串中有效字符的个数,不算'\0',因此总共9个有效字符

故上述printf会分别打印:10  9

因此,选择A


例2

d4efef9335a3461fbd94bad112e3b469.png

答案解析:


对于int arr[] = {1,2,(3,4),5}数组,里面总共有4个元素,(3,4)为逗号表达式,取后者,因此数组中元素分别为:1,2,4,5

而sizeof(arr)求的是整个数组所占空间的大小,即:4*sizeof(int)=4*4=16

因此,选择B

目录
相关文章
|
2月前
|
存储 编译器 C语言
C++内存管理(区别C语言)深度对比
C++内存管理(区别C语言)深度对比
72 5
|
4月前
|
C语言
C语言学习记录——枚举(定义、与结构体的区别、优点)
C语言学习记录——枚举(定义、与结构体的区别、优点)
43 3
|
4月前
|
C语言
C语言学习记录——模拟字符串相关函数(strcpy、strlen、strcat)相关知识-const、typedef
C语言学习记录——模拟字符串相关函数(strcpy、strlen、strcat)相关知识-const、typedef
27 1
|
4月前
|
C语言
深入探索C语言中的sizeof关键字
深入探索C语言中的sizeof关键字
|
4月前
|
C语言
【C语言基础篇】字符串处理函数(一)strlen的介绍及模拟实现
【C语言基础篇】字符串处理函数(一)strlen的介绍及模拟实现
|
4月前
|
编译器 C语言
【C语言】:sizeof操作符的使用和各种常见数据类型的大小
【C语言】:sizeof操作符的使用和各种常见数据类型的大小
43 0
|
4月前
|
C语言
C语言--指针数组和数组指针的区别
C语言--指针数组和数组指针的区别
|
4月前
|
C语言
C语言——oj刷题——模拟实现库函数strlen
C语言——oj刷题——模拟实现库函数strlen
27 0
|
4月前
|
存储 C语言
C语言数组指针和指针数组的区别及使用方法
C语言数组指针和指针数组的区别及使用方法
54 0
【C语言】一篇就够了(建议收藏)——超详解sizeof与strlen的用法
【C语言】一篇就够了(建议收藏)——超详解sizeof与strlen的用法
【C语言】一篇就够了(建议收藏)——超详解sizeof与strlen的用法