C语言中strlen和sizeof的区别

article/2025/10/19 13:32:33

1.strlen是一个库函数使用时需要引用#include<string.h>这个头文件,而sizeof是一个运算符号;

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

3.strlen计算时不包含'\0',而sizeof包含'\0';

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

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

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

strlen的使用:

#include<stdio.h>
#include<string.h>//使用strlen时引用的头文件
int main()
{char arr1[] = "hello";char arr2[] = { 'h','e','l','l','o' };char arr3[] = { 'h','e','l','l','o','\0'};printf("%d\n", strlen(arr1));printf("%d\n", strlen(arr2));//随机值,只有遇到'\0'才结束,而arr2中没有'\0'printf("%d\n", strlen(arr3));
}

打印结果:

#include<stdio.h>
int main()
{//strlen只有在遇到'\0'时才结束char arr[] = { 'a','b','c','d','e','f' };printf("%d\n", strlen(arr));//随机值printf("%d\n", strlen(arr+0));//随机值printf("%d\n", strlen(&arr));//随机值printf("%d\n", strlen(&arr+1));//随机值-6printf("%d\n", strlen(&arr[0]+1));//随机值-1//printf("%d\n", strlen(*arr));//error//printf("%d\n", strlen(arr[1]));//error
}

打印结果:

sizeof的使用:  


#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;} 

 打印结果:

 下面来看两组题目:(sizeof在一维数组中的使用)

#include<stdio.h>
int main()
{//32位平台下,int为4个字节,在64位平台下,int为8个字节//数组名表示首元素地址;两个除外  1.sizeof(数组名),表示整个数组的大小;  2.&数组名,表示整个数组的地址int a[] = { 1,2,3,4 };//4*4=16printf("%d\n", sizeof(a));//16 ,sizeof(数组名),表示整个数组的大小printf("%d\n", sizeof(a+0));//4/8 ,数组名表示首元素地址,a+0还是首元素地址,地址的大小就是4/8printf("%d\n", sizeof(*a));//4 ,*a代表首元素,大小就为4printf("%d\n", sizeof(a+1));//4/8 ,首元素地址+1为第2个元素的地址,地址的大小就是4/8printf("%d\n", sizeof(a[1]));//4 ,第2个元素的大小,大小为4printf("%d\n", sizeof(&a));//4/8 ,取的是整个数组的地址,地址的大小就是4/8printf("%d\n", sizeof(*&a));//16 ,&a取是的地址,数组的地址解引用访问的数组,sizeof计算的就是整个数组的大小printf("%d\n", sizeof(&a+1));//4/8 ,&a代表整个数组的地址,+1就是跳过整个数组,但还是地址,地址大小就是4/8printf("%d\n", sizeof(&a[0]));//4/8 ,a[0]是首元素地址,地址的大小就是4/8printf("%d\n", sizeof(&a[0]+1));//4/8 ,数组的第二个地址,地址的大小就是4/8

 在32位平台和64位平台下打印的结果:

sizeof在二维数组中的使用:

#include<stdio.h>
int main()
{int a[3][4] = { 0 };printf("%p\n", &a[0][0]);//首地址printf("%p\n", a[0]+1);//第一行第二个的地址printf("%p\n", a+1);//第二行的首地址printf("%p\n", &a[0]+1);//第二行的首地址printf("%d\n", sizeof(a));//48,sizeof(数组名),表示整个数组的大小printf("%d\n", sizeof(a[0][0]));//4,首元素的大小printf("%d\n", sizeof(a[0]));//16,第一行的大小,相当于第一行作为一维数组的数组名printf("%d\n", sizeof(a[0]+1));//4,a[0]是第一行的数组名,数组名此时是首元素的地址,a[0]其实就是第一行第一个元素的地址,所以a[0]+1是第一行第二个元素的地址,地址大小是4/8printf("%d\n", sizeof(*(a[0]+1)));//4,第一行第二个元素的大小printf("%d\n", sizeof(a+1));//4,第二行首元素大小,a是二维数组的数组名,没有sizeof(a),也没有&(a),所以a是首元素的地址,二维数组的首地址是第一行,a就是第一行(首元素)的地址,a+1就是第二行的首地址printf("%d\n", sizeof(*(a + 1)));//16,第二行的大小printf("%d\n", sizeof(&a[0] + 1));//4,第二行的首地址printf("%d\n", sizeof(*(&a[0] + 1)));//16,第二行的大小printf("%d\n", sizeof(*a));//16,a是首元素的地址,第一行的地址,就是计算*a第一行的大小printf("%d\n", sizeof(a[3]));//16,第三行的大小}

 打印结果:

 总结:

        上面说了sizeof和strlen的区别和使用方法,需要我们特别注意的是,srtlen只有在遇到'\0'时,才会结束,就是只计算'\0'之前的字符,所以我们在使用时一定要记得加上'\0';在使用sizeof时,我们必须要记住,数组名是首元素地址,有两个除外1.sizeof(数组名),计算的是整个数组的大小,单位是字节;2. &数组名,表示的是整个数组的地址。


http://chatgpt.dhexx.cn/article/f9oB3NbT.shtml

相关文章

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;而后者想要在具有一定角度…

UnityVR--组件2--Rigidbody--移动控制

移动的方式有transform.Translate&#xff08;&#xff09;、rigidbody.velocity&#xff08;&#xff09;、rigidbody.MovePosition&#xff08;&#xff09;等多种。本篇使用rigidbody的方式&#xff0c;并向着相机朝向的方向控制移动。也就是继上一篇“第三人称相机控制”&a…

第二十五章 Unity 刚体Rigidbody

在物理学中&#xff0c;静止和匀速直线运动是物体的平衡状态&#xff0c;如果给该物体施加某一个力的话&#xff0c;物体的平衡状态就会改变&#xff0c;当然这个真理的前提是理想状态。我们知道在现实世界中&#xff0c;由于重力和摩擦力的存在&#xff0c;任何一个物体都不可…

Unity:使用RigidBody

There are mainly two ways of moving a gameObject in Unity: 在Unity中移动游戏对象的方式主要有两种&#xff1a; Changing Position Coordintes: By directly changing the position of a gameObject without much consideration to its physics or other such components…

Rigidbody刚体组件详解

【组件界面】 【作用】 有刚体组件的物体受物理引擎控制&#xff0c;表现得像物理世界中的物体&#xff0c;例如受重力作用、受摩擦力推力等各种力作用、遇到墙会停下来不能穿过去。在Unity中&#xff0c;若某物体不带有碰撞器&#xff0c;仍会被穿过。碰撞器的作用在于检测空…

Unity API详解——Rigidbody类

Rigidbody类的功能是用来模拟GameObject对象在现实世界中的物理特性&#xff0c;包括重力、阻力、质量、速度等。对RIgidbody对象属性的赋值代码通常放在脚本的OnFixedUpdate()方法中。本博客主要介绍Rigidbody类的一些实例属性和实例方法&#xff0c;最后对Rigidbody类中功能相…

Unity 3D 刚体(Rigidbody)|| Unity 3D 刚体实践案例

Unity 3D 中的 Rigidbody 可以为游戏对象赋予物理特性&#xff0c;使游戏对象在物理系统的控制下接受推力与扭力&#xff0c;从而实现现实世界中的物理学现象。 我们通常把在外力作用下&#xff0c;物体的形状和大小&#xff08;尺寸&#xff09;保持不变&#xff0c;而且内部…

【Unity3D】刚体组件Rigidbody

1 前言 刚体&#xff08;Rigidbody&#xff09;是运动学&#xff08;Kinematic&#xff09;中的一个概念&#xff0c;指在运动中和受力作用后&#xff0c;形状和大小不变&#xff0c;而且内部各点的相对位置不变的物体。在 Unity3D 中&#xff0c;刚体组件赋予了游戏对象一些运…