了解——strlen 函数和关键字sizeof的区别

1.sizeof 操作符

——sizeof 操作符的作用:

          用于计算数据类型或变量在内存中所占的字节数,它返回的是一个 size_t 类型的结果,表            示字节数。

——题外补充知识:

1字==2字节;1字节==8位(0x1A代表一个字节);

——STM32中的字节理解——因为字可以因计算机架构和操作系统而不同。在不同的系统中,“字”可能指代不同的位数,通常是指定的固定位数。

在STM32微控制器中,

一个字通常由32位(4个字节)组成,

一个字====8个十六进制数字组成。0x1A 2B 3C 4D代表一个字

假设在STM32中有一个字的十六进制表示为:(0x1A2B3C4D代表一个字)。

这个十六进制值表示了一个32位的字,其中每两个十六进制数字表示一个字节。在这个例子中,这个字被分为四个字节,每个字节的十六进制值如下:

  • 第一个字节:0x1A
  • 第二个字节:0x2B
  • 第三个字节:0x3C
  • 第四个字节:0x4D

因此,整个字的十六进制表示为 0x1A2B3C4D,其中包含了四个字节的十六进制值。这种表示方式在STM32开发中经常用于操作寄存器或内存中的数据。

——题外知识:

size_t 类型是什么类型?

size_t 是一种标准整数数据类型,通常被用来表示内存中对象的大小。它是在 C 和 C++标准库中定义的,可以保证能够存储系统中最大可能的对象大小。具体来说,size_t 类型的大小是足以容纳系统中最大可能对象的大小的无符号整数类型。

size_t 类型的大小是根据不同编译器和系统的具体实现而有所不同。在大多数情况下,size_t 被定义为 unsigned int 或 unsigned long 类型,取决于编译器和系统的位数。在 32 位系统上,size_t 通常是 unsigned int,而在 64 位系统上,size_t 通常是 unsigned long

2.strlen 函数——<string.h> 头文件

——strlen 函数作用:

       计算以 NULL 结尾的字符串的长度,即返回字符串中字符的数量,不包括 NULL 终止符。

3.strlen 函数和关键字sizeof的区别

strlen 和 sizeof 在计算字符串长度或大小时有明显的区别。具体区别如下:

——strlen 函数:

  strlen 函数用于计算以 NULL 结尾的字符串中的字符数量(不包括 NULL 终止符)。

  strlen 函数是一个库函数,需要包含头文件 string.h

  strlen 函数只适用于以 NULL 结尾的字符串,不适用于其他类型的数据结构。

        返回值为一个整数,表示字符串的长度。

——sizeof 操作符:

  sizeof 操作符用于计算数据类型或变量在内存中所占的字节数。

        对于数组,sizeof 返回整个数组占用的字节数,包括所有元素和 NULL 终止符。

        对于指针,sizeof 返回指针本身的字节数,而不是指向的数据所占的字节数。

  sizeof 是一个编译时计算的操作符,返回的结果是在编译时确定的常量。

——总结:使用 strlen 函数来获取以 NULL 结尾的字符串的长度,

           使用 sizeof 操作符来获取数组或变量的字节数。

4.具体编程及其结果

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello"; // 字符串数组
    char *ptr = "Hello";  // 字符串指针
    
    // 使用 strlen 函数获取字符串长度
    int length_str = strlen(str);
    int length_ptr = strlen(ptr);
    
    // 使用 sizeof 操作符获取数组长度
    int size_str = sizeof(str) - 1; // 减去 NULL 终止符
    int size_ptr = sizeof(ptr);
    
    printf("Using strlen:\n");
    printf("Length of str: %d\n", length_str);
    printf("Length of ptr: %d\n", length_ptr);
    
    printf("\nUsing sizeof:\n");
    printf("Size of str: %d\n", size_str);
    printf("Size of ptr: %d\n", size_ptr);
    
    return 0;
}

——调试结果是:

     使用sizeof计算的指针变量是: Size of ptr:4;——STM32 中,如果计算机64位,那么就是8。

  1. 在 32 位体系结构的计算机上,指针变量通常占用 4 个字节(32 位),因为它们需要足够的空间来存储一个 32 位的地址。

  2. 在 64 位体系结构的计算机上,指针变量通常占用 8 个字节(64 位),因为它们需要足够的空间来存储一个 64 位的地址。

  • 23
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值