c语言中sizeof和strlen的区别是什么_sizeof和strlen有什么区别

来源:这里教程网 时间:2026-02-21 17:06:59 作者:

sizeof 是运算符,用于获取数据类型或变量在内存中的字节数;2. strlen 是函数,用于计算字符串长度(不包括 \0);3. sizeof 在编译时确定,而 strlen 在运行时计算;4. sizeof 可作用于数据类型、数组和指针,返回其占用空间大小,而 strlen 仅适用于以 \0 结尾的字符串;5. 使用 sizeof 可获取数组总大小,而 strlen 更适合动态计算字符串有效长度。

c语言中sizeof和strlen的区别是什么_sizeof和strlen有什么区别

C 语言中

sizeof
strlen
的区别在于,
sizeof
是一个运算符,用于获取数据类型或变量在内存中占用的字节数;而
strlen
是一个函数,用于计算字符串的长度,不包括字符串结束符
\0

c语言中sizeof和strlen的区别是什么_sizeof和strlen有什么区别

sizeof
是编译时确定的,而
strlen
是运行时计算的。

c语言中sizeof和strlen的区别是什么_sizeof和strlen有什么区别

sizeof
运算符的详细解释

sizeof
是一个运算符,不是函数。这意味着它在编译时就被处理,而不是在程序运行时。它返回的是一个类型或变量所占用的内存字节数。

立即学习“C语言免费学习笔记(深入)”;

数据类型:
sizeof(int)
返回
int
类型占用的字节数,通常是 4 个字节(在 32 位系统中)。
变量:
sizeof(variable)
返回变量
variable
占用的字节数。
数组:
sizeof(array)
返回整个数组占用的字节数,等于数组元素个数乘以每个元素的大小。
指针:
sizeof(pointer)
返回指针变量占用的字节数,通常是 4 个字节(在 32 位系统中)或 8 个字节(在 64 位系统中),与指针指向的数据类型无关。

例如:

c语言中sizeof和strlen的区别是什么_sizeof和strlen有什么区别
#include <stdio.h>
int main() {
    int arr[10];
    int *ptr = arr;
    printf("Size of int: %zu bytes\n", sizeof(int));
    printf("Size of arr: %zu bytes\n", sizeof(arr));
    printf("Size of ptr: %zu bytes\n", sizeof(ptr));
    return 0;
}

输出结果可能为:

Size of int: 4 bytes
Size of arr: 40 bytes
Size of ptr: 8 bytes

注意,

sizeof(arr)
返回 40,因为
arr
是一个包含 10 个
int
元素的数组,每个
int
占用 4 个字节。
sizeof(ptr)
返回 8,因为
ptr
是一个指针,在 64 位系统中占用 8 个字节。

strlen
函数的详细解释

strlen
是一个 C 标准库函数,定义在
<string.h></string.h>
头文件中。它用于计算字符串的长度,直到遇到字符串结束符
\0
为止,但不包括
\0
本身。

字符串:
strlen(str)
返回字符串
str
的长度,即从字符串的起始位置到
\0
之间的字符数。

例如:

#include <stdio.h>
#include <string.h>
int main() {
    char str[] = "Hello";
    char str2[20] = "World";
    char str3[5] = {'A', 'B', 'C', 'D', '\0'};
    printf("Length of str: %zu\n", strlen(str));
    printf("Length of str2: %zu\n", strlen(str2));
    printf("Length of str3: %zu\n", strlen(str3));
    return 0;
}

输出结果为:

Length of str: 5
Length of str2: 5
Length of str3: 4

strlen
函数会遍历字符串,直到找到
\0
字符。如果字符串中没有
\0
字符,
strlen
可能会导致程序崩溃或返回不确定的值。

sizeof
strlen
在数组和指针上的区别

这是最容易混淆的地方。当

sizeof
用于数组时,它返回整个数组的大小;而当
sizeof
用于指针时,它返回指针变量本身的大小。
strlen
只能用于字符串,它会计算字符串的长度,直到遇到
\0
为止。

考虑以下代码:

#include <stdio.h>
#include <string.h>
int main() {
    char str[] = "Hello";
    char *ptr = str;
    printf("Sizeof str: %zu\n", sizeof(str));
    printf("Sizeof ptr: %zu\n", sizeof(ptr));
    printf("Strlen str: %zu\n", strlen(str));
    // printf("Strlen ptr: %zu\n", strlen(ptr)); // 这行代码可以运行,但是意义不大
    return 0;
}

输出结果可能为:

Sizeof str: 6
Sizeof ptr: 8
Strlen str: 5

sizeof(str)
返回 6,因为
str
是一个包含 6 个字符的数组(包括
\0
)。
sizeof(ptr)
返回 8,因为
ptr
是一个指针,在 64 位系统中占用 8 个字节。
strlen(str)
返回 5,因为字符串 "Hello" 的长度是 5。

什么时候使用
sizeof
,什么时候使用
strlen

使用

sizeof

当你需要知道数据类型或变量在内存中占用的字节数时。 当你需要计算数组的总大小时。 当你需要在编译时确定大小的信息时。

使用

strlen

当你需要计算字符串的长度时。 当你需要动态地确定字符串的长度时。

总的来说,

sizeof
用于获取静态的大小信息,而
strlen
用于获取动态的字符串长度信息。理解它们的区别对于编写正确的 C 代码至关重要。

相关推荐