sizeof
和strlen
是C语言中的两个常用函数,它们的作用和使用方式有所不同。
sizeof
sizeof
是一个运算符而非函数,用于计算数据类型或变量占用的字节数。它可以计算任意数据类型(包括基本类型、自定义结构体、数组等)的大小。- 例如,
sizeof(int)
返回整型的字节数,通常是4个字节;sizeof(double)
返回双精度浮点数的字节数,通常是8个字节。 sizeof
在编译时求值,并且结果是一个常量表达式。int arr[10]; size_t size = sizeof(arr); // 计算数组arr占用的总字节数 printf("数组arr占用 %zu 字节\n", size); struct Point { int x; int y; }; size_t structSize = sizeof(struct Point); // 计算结构体Point占用的总字节数 printf("结构体Point占用 %zu 字节\n", structSize);
- 结果为:
2.strlen(使用时需要包含头文件#include<string.h>,sizeof则不用包含)
strlen
是一个字符串处理函数,用于计算以null字符('\0'
)结尾的字符串的长度(不包括null字符本身)。- 它需要传入一个指向字符串首字符的指针作为参数,并从该位置开始逐个检查字符直到遇到null字符。
- 返回值是一个无符号整数(
size_t
)表示字符串的长度。
char str[] = "Hello, world!";
size_t length = strlen(str); // 计算字符串str的长度
printf("字符串str长度为 %zu\n", length);
运行结果为:
strlen
函数只适用于以null字符结尾的C风格字符串,即使用字符数组表示的字符串。如果传入一个指针指向非法内存区域或者没有以null字符结尾的字符序列,将导致未定义行为(undefined behavior)。
综上,sizeof
计算数据类型或变量占用的字节数,而strlen
计算以null字符结尾的字符串的长度。