深入解析sizeof和strlen的区别与联系

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 深入解析sizeof和strlen的区别与联系

大家好,今天我们来探讨一下C语言中两个常用的函数sizeof和strlen。虽然它们都与字符串有关,但它们的用途和实现原理却大相径庭。下面我将从以下几个方面进行对比分析:

一、深度解析

1.sizeof

定义:

sizeof是一个操作符用于获取数据类型或变量在内存中所占的字节数。它是一个编译时运算符,其结果在编译时就已经确定。

参数类型:

sizeof可以接受两种参数:数据类型和变量。例如:

sizeof(int);    // 返回int类型所占的字节数
sizeof(a);      // 返回变量a所占的字节数

sizeof 计算变量所占内存内存空间⼤⼩,单位是字节,如果操作数是类型的话,计算的是使⽤类型创建的变量所占内存空间的⼤⼩。sizeof 只关注占⽤内存空间的⼤⼩,不在乎内存中存放什么数据。如果数组是字符串时,sizeof 计算数组大小时包括了结尾的空字符(‘\0’)。

返回值:

sizeof 返回的是数据类型或变量所占用的字节数,类型为 size_t(无符号整数类型)

2.strlen

定义:

strlen是一个函数,(所需的头文件为<string.h>)用于计算字符串的实际长度,不包括结尾的空字符(‘\0’)。它是在运行时进行计算,返回值为字符串的实际长度。

函数原型:

size_t strlen ( const char * str );

参数类型:

strlen的参数必须是一个以空字符(‘\0’)结尾的字符串。例如:

strlen("hello world");  // 返回11,不包括结尾的空字符

strlen统计的是从该函数的参数 str 中这个地址开始向后,\0 之前字符串中字符的个数。

strlen 函数会⼀直向后找 \0 字符,直到找到为⽌,所以可能存在越界查找。

返回值:

strlen 返回的是字符串中不包括结尾空字符(‘\0’)的字符数,类型也是 size_t(无符号整数类型)

二、对比

sizof与strlen对比

sizeof strlen
sizeof是操作符 strlen是库函数

sizeof计算操作数所占内存的⼤⼩,

单位是字节

strlen是求字符串⻓度的,统计的是 \0 之前字符的隔个数

不关注内存中存放什么数据

关注内存中是否有 \0 , 如果没有 \0 ,就会持续往后找,可能会越界

三、举例说明

#include <stdio.h>
#include <string.h>
int main() {
    char str[] = "Hello, World!";
    // sizeof 返回的是整个数组的大小,包括结尾的空字符和可能的额外空间
    size_t size_of_str = sizeof(str);
    // strlen 返回的是字符串中字符的数量,不包括结尾的空字符
    size_t length_of_str = strlen(str);
    printf("sizeof(str) = %zu\n", size_of_str);  // 通常会输出 13
    printf("strlen(str) = %zu\n", length_of_str);  // 输出 12
    return 0;
}

在这个例子中,sizeof(str) 的返回值是 13,因为 “Hello, World!” 加上一个空字符 \0 一共是 13 个字符(每个字符占用 1 个字节),而 strlen(str) 的返回值是 12,因为它只计算了 “Hello, World!” 中非空字符的数量。

总结

sizeof和strlen虽然都与字符串有关,但它们的用途和实现原理有很大差异。sizeof用于获取数据类型或变量在内存中所占的字节数,而strlen用于计算字符串的实际长度。在实际编程过程中,应根据具体需求选择合适的函数。希望大家通过本文的介绍,能更好地理解和使用这两个函数。


相关文章
|
5月前
|
编译器 C语言
sizeof,sizeof与strlen的区别
sizeof,sizeof与strlen的区别
45 0
sizeof,sizeof与strlen的区别
|
4月前
|
C语言
sizeof与strlen的使用及其区别
sizeof与strlen的使用及其区别
sizeof与strlen的使用及其区别
|
1天前
|
编译器 C++
sizeof 和 strlen 的区别
`sizeof` 和 `strlen` 是 C 和 C++ 中常用的运算符/函数,功能和用途不同
18 10
|
4月前
|
C语言
C 语言关于sizeof() 和 strlen()区别?
C 语言关于sizeof() 和 strlen()区别?
28 2
|
5月前
|
存储 编译器
strlen()和sizeof()的区别
strlen()和sizeof()的区别
34 0
|
5月前
|
存储 安全 编译器
C/C中sizeof和strlen函数的实现:详细解析sizeof和strlen函数的实现机制、参数说明和使用技巧
C/C中sizeof和strlen函数的实现:详细解析sizeof和strlen函数的实现机制、参数说明和使用技巧
44 1
|
5月前
strlen与sizeof 的基本用法
strlen与sizeof 的基本用法
38 0
|
5月前
|
Serverless
sizeof和strlen的区别【详解】
sizeof和strlen的区别【详解】
51 0
|
10月前
|
C语言
strlen和sizeof的区别
strlen和sizeof的区别
74 0
|
10月前
strlen与sizeof的区别
strlen与sizeof的区别
37 0