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

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

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

sizeof
运算符的详细解释
sizeof是一个运算符,不是函数。这意味着它在编译时就被处理,而不是在程序运行时。它返回的是一个类型或变量所占用的内存字节数。
立即学习“C语言免费学习笔记(深入)”;
数据类型:sizeof(int)返回
int类型占用的字节数,通常是 4 个字节(在 32 位系统中)。 变量:
sizeof(variable)返回变量
variable占用的字节数。 数组:
sizeof(array)返回整个数组占用的字节数,等于数组元素个数乘以每个元素的大小。 指针:
sizeof(pointer)返回指针变量占用的字节数,通常是 4 个字节(在 32 位系统中)或 8 个字节(在 64 位系统中),与指针指向的数据类型无关。
例如:

#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 代码至关重要。
