首页 > 其他分享 >在单片机工程中获取长度的sizeof和strlen之间的区别

在单片机工程中获取长度的sizeof和strlen之间的区别

时间:2024-12-21 17:27:01浏览次数:6  
标签:空字符 单片机 内存 类型 字符串 sizeof strlen

sizeof和strlen在C语言(以及C++)中都是用于获取某种“大小”的工具,但它们之间有着显著的区别。以下是它们的主要差异:

一、定义与用法

  1. sizeof

    • 定义:sizeof是一个运算符,用于获取数据类型或变量在内存中所占的字节数。
    • 用法:sizeof可以用于数据类型(如int、float等)或变量(包括数组、指针等)。当用于数据类型时,它返回该类型对象在内存中通常所占的字节数;当用于变量时,它返回该变量实际所占的内存大小。
  2. strlen

    • 定义:strlen是一个函数,用于计算字符串的长度(即字符串中字符的个数,不包括结尾的空字符'\0')。
    • 用法:strlen的参数必须是指向字符数组(即字符串)的指针(char*)。它遍历字符串直到遇到空字符'\0',并返回遍历过程中遇到的字符数。

二、功能与行为

  1. sizeof

    • 功能:获取对象或类型所占的内存大小(以字节为单位)。
    • 行为:sizeof是在编译时计算的(对于静态或已知大小的对象),因此它不会增加程序的运行时间开销。对于数组,sizeof返回整个数组所占的内存大小;对于指针,sizeof返回指针本身所占的内存大小(通常与平台相关,如4字节或8字节)。
  2. strlen

    • 功能:计算字符串的长度(不包括结尾的空字符'\0')。
    • 行为:strlen是在运行时计算的,因为它需要遍历字符串来找到空字符'\0'。因此,它可能会增加程序的运行时间开销。对于以空字符结尾的字符串,strlen能够正确计算其长度;但如果字符串未正确以空字符结尾,strlen可能会访问未定义的内存区域并导致错误。

三、返回值与类型

  1. sizeof

    • 返回值:返回对象或类型所占的字节数。
    • 类型:返回值的类型是size_t,这是一个无符号整数类型,用于表示对象的大小。
  2. strlen

    • 返回值:返回字符串的长度(不包括结尾的空字符'\0')。
    • 类型:返回值的类型也是size_t

四、注意事项

  1. 使用sizeof时,要注意它是编译时运算符,因此不能用于动态分配的内存(如通过malloc分配的内存)。对于动态内存,通常需要使用其他方法来获取其大小(如通过记录分配时的大小或使用特定的库函数)。
  2. 使用strlen时,要确保字符串是以空字符'\0'结尾的,否则strlen可能会访问未定义的内存区域并导致程序崩溃或产生错误的结果。此外,由于strlen是在运行时计算的,因此它可能会增加程序的运行时间开销。

综上所述,sizeof和strlen在C语言(以及C++)中都是有用的工具,但它们有着不同的定义、用法、功能和行为。在使用它们时,需要根据具体的需求和场景来选择合适的工具。

标签:空字符,单片机,内存,类型,字符串,sizeof,strlen
From: https://blog.csdn.net/2301_79344709/article/details/144633568

相关文章

  • 1535、基于51单片机的交通灯(独立按键,夜间,管制)(proteus仿真+程序+原理图+流程图+元器件
    毕设帮助、开题指导、技术解答(有偿)见文未 目录方案选择单片机的选择一、设计功能二、proteus仿真图三、原理图四、程序源码资料包括:方案选择单片机的选择方案一:STM32系列单片机控制,该型号单片机为LQFP44封装,内部资源足够用于本次设计。STM32F103系列芯片......
  • 基于 51 单片机的交通灯控制系统设计与实现
    1.系统概述交通灯控制系统是一个典型的嵌入式应用,它通过控制不同方向的信号灯来管理交通流,确保交通安全和流畅。本项目将使用51单片机实现一个简单的交通灯控制系统。2.硬件设计2.1硬件组件51单片机:作为系统的控制核心。LED灯:用于模拟交通信号灯的红、黄、绿灯。电阻......
  • 22.基于51单片机的蓝牙密码锁设计(实物)
    22.基于51单片机的蓝牙密码锁设计(实物)通过百度网盘分享的文件:资料详解链接:https://pan.baidu.com/s/1zPXLcLmqZAljkgMeU2RT7w?pwd=597l 提取码:597l 本设计以STC89C52单片机为核心控制器,加上其他的模块一起组成蓝牙密码锁的整个系统,其中包含中控部分、输入部分和输出部分......
  • 【小白51单片机专用教程】protues仿真AT89C51入门
    课程特点无需开发板0基础教学软件硬件双修辅助入门        本课程面对纯小白,因此会对各个新出现的知识点在实例基础上进行详细讲解,有相关知识的可以直接跳过。课程涉及protues基本操作、原理图设计、数电模电、kell使用、C语言基本内容,所有涉及知识都将建立在实例的......
  • 单片机实物成品-001农业大棚监测(代码+硬件+论文)
     stm32 农业大棚监测系统(温度+湿度+烟雾+光照+二氧化碳+空调降温+加湿+报警+灯光+排风+自动模式+手动模式+wifi传输控制+送小程序源码)本系统基于STM32F103C8T6单片机,设计了一个集环境监测、智能控制与远程通信于一体的大棚环境监测系统。通过MQ-2气体传感器、DHT11温湿度......
  • 单片机毕业设计项目分享(2)
    已经为大家整理了上万个STM32、51的毕设项目,还没确定选题方向的同学可以参考一下毕设项目1: stm32智能饮水机控制系统项目介绍:主要功能:使用STM32为主控制器,LCD1602显示当前信息:水温、模式、设置水温。DS18b20检测当前饮水机水温,水位传感器检测是否有水,无水情况下蜂鸣器......
  • 关于单片机中断的认识(1)
    中断服务函数的地址存储在中断向量地址的范围中,中断向量地址存储空间有四个字节。硬件NVIC轮询中断向量地址,如果使能了中断,NVIC检测到中断向量被使能,就会进入中断函数。中断函数的名字是固定的,不能自己重新取。注意中断函数的执行内容不能太复杂,然后快要退出中断时记得清除......
  • AT24C02密码锁,51单片机。
    #include<REGX52.H>#include<Buttons.h>#include<AT24C02.h>#include<LCD1602.h>#include<Delay.h>#include<security.h>#include<Buzzer.h>unsignedcharOriginal_Password[6]={0};//原始密码数组unsignedcharN......
  • 单片机上电后程序不运行怎么排查问题?
    1.电源检查。使用电压表测量单片机的电源电压是否正常,确保电压在规定的范围内,如常见的5V。2.复位检查。检查复位引脚的电压是否正常,在单片机接通电源时,复位引脚通常会有一个高电平,按下复位按钮时,复位引脚也会产生高电平。3.晶振检查。使用示波器或频率计数器检查外部晶振......
  • 【079】基于51单片机智能浇水灌溉系统【Proteus仿真+Keil程序+报告+原理图】
    ☆、设计硬件组成:51单片机最小系统+DHT11温湿度传感器+LCD1602液晶显示+土壤湿度传感器+光敏电阻+ADC0832模数转换芯片+AT24C02存储芯片+水泵浇水+LED补光灯+按键设置+LED报警灯。1、设计采用STC89C51/52、AT89C51/52、AT89S51/52作为主控芯片;2、通过ADC0832模数转换芯片......