【C语言之区分sizeof 和 strlen】

article/2025/10/19 11:11:31

C语言之区分sizeof 和 strlen

  • 详解C语言sizeof 和 strlen
    • 1、单目操作符
      • 1.1、详解sizeof单目操作符
      • 1.2、sizeof代码部分
        • 1.2.1、sizeof例程1
        • 1.2.2、sizeof例程2
        • 1.2.3、sizeof例程3
    • 2、详解strlen函数
      • 2.1、strlen代码部分
        • 2.1.1、strlen例程1
    • 3、区别strlen函数和sizeof操作符
        • 3.1、sizeof( )和strlen( )的运用例程1
    • 4.结束语

详解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]));//1printf("%d\n", sizeof(arr));//10---char数组字节1---10个就是1*10 = 10//同理:int类型那么就是10*4 = 40return 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));//16printf("%d\n", sizeof(arr2));//16return 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\0printf("%d %d\n", sizeof(str), strlen(str));//10 9//strlen()函数求字符串长度//sizeof关键字计算变量/类型所占用的内存大小,单位字节return 0;
}

4.结束语

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


http://chatgpt.dhexx.cn/article/4GT6NoIL.shtml

相关文章

用C语言实现strlen函数

按照惯例&#xff0c;我们先上代码&#xff1a; #include <stdio.h> #include <assert.h>size_t my_strlen(const char* arr)//size_tunsigned int 无符号整型 {assert(arr ! NULL);int i 0;int count 0;while(arr[i] ! \0){count;arr;}return count; } int main…

c语言的字符数组strlen的详细使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、字符数组中strlen的使用详解1、字符数组中strlen&#xff08;arr0&#xff09;2、字符数组中strlen&#xff08;*arr&#xff09;和strlen&#xff08;arr[…

C语言实现strlen的三种方法

目录 1.strlen介绍 strlen --- 求字符串长度 2.如何使用strlen库函数 3.三种方法实现strlen 计数器法&#xff1a; 递归法&#xff1a; 指针-指针法&#xff1a; 4.关于strlen返回值 1.strlen介绍 strlen --- 求字符串长度 size_t strlen (const char* str); 找到字符…

C语言:strlen函数

目录 一、strlen&#xff08;&#xff09;函数的简介二、strlen&#xff08;&#xff09;的三种实现方法2.1第一种方法&#xff08;直接&#xff09;2.2第二种方法&#xff08;递归&#xff09;2.3第三种方法&#xff08;指针-指针&#xff09; 三、总结 一、strlen&#xff08…

C语言学习之sizeof与strlen

1.二者的概念 1.sizeof sizeof是C语言中的一个关键字&#xff0c;sizeof(a)表示的是a所占内存空间的大小&#xff0c;单位是字节。在字符数组中会统计‘\0’所占空间。其返回类型为size_t类型&#xff0c;C99和C11提供%zd转换说明匹配sizeof的返回类型&#xff08;即&#xff0…

c语言strlen用法,如何使用c语言中的strlen()函数

c语言中strlen()函数的用法是&#xff1a;【strlen(const char *str)】。该函数用于计算字符串的长度&#xff0c;直到空结束字符&#xff0c;但不包括结束字符&#xff0c;并返回字符串的长度。 函数介绍&#xff1a; (推荐教程&#xff1a;c语言教程) strlen()函数用于计算字…

C语言中strlen和sizeof的区别

1.strlen是一个库函数使用时需要引用#include<string.h>这个头文件&#xff0c;而sizeof是一个运算符号&#xff1b; 2.strlen计算的是\0之前的字符个数&#xff0c;sizefo计算的是所占空间内存的大小&#xff0c;单位是字节&#xff1b; 3.strlen计算时不包含\0&#…

C语言的库函数:strlen的用法

首先&#xff0c;strlen使可以计算字符串的长度&#xff0c;且只能用于字符串&#xff0c;计算的是\0之前的字符个数。 因为strlen是库函数&#xff0c;所以其头文件是string.h #include<stdio.h> #include<string.h> int main() {char arr[]{"abcdef"…

C语言strlen函数详解

strlen函数详解 一.strlen函数简介1.函数原型2.注意事项 二.strlen函数模拟实现1.计数器方式2.递归实现3.指针-指针实现 一.strlen函数简介 1.函数原型 size_t strlen ( const char * str );2.注意事项 ①字符串以 ‘\0’ 作为结束标志&#xff0c;strlen函数返回的是在字符…

C语言:Strlen()函数你了解多少?

一、strlen&#xff08;&#xff09;函数的介绍及用法 C语言中strlen是一种函数&#xff0c;主要用于计算字符串的长度。 &#x1f6a9;strlen&#xff08;&#xff09;从字符串的开头位置依次往后面计数&#xff0c;直到遇到‘\0’停止&#xff0c;所计算的字符串大小为‘\0’…

【C语言】strlen()函数

目录 一、strlen&#xff08;&#xff09;函数的简介 二、strlen&#xff08;&#xff09;函数的具体使用 三、使用strlen函数的注意事项 四、实现strlen函数功能的三种方式 1.计数器的方式 2.递归的方式 3.指针减指针的方式 总结 一、strlen&#xff08;&#xff09;…

C语言strlen()函数

strlen()函数&#xff1a;该函数从第一个字符开始计算字符串中字符数&#xff0c;直到遇到空字符即\0为止&#xff0c;然后返回计算字符数的长度&#xff0c;包括\0。 以下是strlen()函数代码&#xff0c;如下&#xff1a; ##include <stdio.h> #include <string.h&…

jQuery属性概述

jQuery属性 1 操作元素属性1.1 读取属性1.2 修改属性1.3 删除属性 2 操作样式类2.1 添加类2.1 判断类2.3 移除类2.4 交替类 3 操作CSS3.1 操作CSS样式3.2 操作宽和高 4 操作页面内容4.1 操作HTML代码4.2 操作文本内容4.3 操作值 5 查找与筛选元素5.1 过滤&#xff08;Filtering…

jQuery四:获取、设置、移除属性;attr(“href“)、attr(“href“,“http://www.baidu.com“)、removeAttr(“href“);

attr()方法是用于设置标签的属性&#xff0c;比如src&#xff0c;href&#xff0c;title&#xff1b;&#xff08;这些更多的是元素的基本属性&#xff0c;HTML的属性&#xff09;&#xff1b; 目录 一&#xff1a;操作元素属性 &#xff08;1&#xff09;attr()方法&#x…

Rigidbody2D ( Simulated )

bool类型,设为false后则不会模拟刚体。

[ 游戏开发日记with Unity ] 首先,认识你自己,或者说Player吧。 有关于Rigidbody2D和Collider的一些使用知识

写在前面 这个系列&#xff08;坑&#xff09; 来自一个用Unity开发的2D横版射击游戏的开发过程&#xff0c;用来记录学习进度以及一些学习心得。和大家分享共勉&#xff0c;有错误的话请评论指出&#xff0c;我会积极回复。 那么&#xff0c;我们开始吧 Q.问题是什么&#xf…

rigidBodyTree是什么(附使用例子和代码)

目录 介绍将连杆加入刚体树DH参数添加机器人关节连杆修改刚体树模型设置刚体树动态特性外力作用导致关节的移动载入自带机器人模型并显示 介绍 rigidBodyTree是较新版本的MATLAB(小虎用的是2019b)自带的robotics相关工具箱里面的一个刚体树。它可以实现简单机器人刚体关节的连…

Unity中Rigidbody的属性 方法

RIgidbody组件 常用属性 Mass&#xff1a;质量 最小值0.00000001 最大值10000000000 Drag&#xff1a;阻力 最小值0 最大值无限 Angular Drag&#xff1a;角阻力 最小值0 最大值无限 Use Gravity&#xff1a;使用重力 is Kinematic&#xff1a;物理是否影响该物体&#x…

[Unity Mirror] Network Rigidbody

英文原文&#xff1a; https://mirror-networking.gitbook.io/docs/components/network-rigidbody Network Rigidbody目前被归类为“实验性”&#xff0c;因此请分享您发现的任何问题或错误&#xff0c;如果生产构建&#xff0c;请自担风险使用。 Network Rigidbody 组件通过网…

Unity Rigidbody实现爬坡功能

文章目录 &#x1f388; 简介&#x1f388; 实现原理&#x1f388; 实现代码 &#x1f388; 简介 人物移动功能的实现或许用到Character Controller组件或许用到Rigidbody刚体组件&#xff0c;前者可以直接实现在某些高地不平的地面上移动&#xff0c;而后者想要在具有一定角度…