C语言中的sizeof和strlen是两个常用的操作符/函数,但它们的功能和用途有很大的区别。
sizeof
sizeof是C语言中的一个关键字,sizeof是一个运算符,它用于计算任何类型或对象的大小,以字节为单位。它可以用于计算数组、结构体、指针等数据类型的大小,甚至可以用于计算整个程序的内存大小。
例如,下面的代码演示了如何使用sizeof计算一个int类型变量的大小:
int x = 5;
printf("Size of int: %zu bytes\n", sizeof(int));
printf("Size of x: %zu bytes\n", sizeof(x));
输出结果为:
Size of int: 4 bytes
Size of x: 4 bytes
可以看到,sizeof返回的结果是int类型的大小,即4个字节。
除了计算变量的大小,sizeof还可以用于计算数组、结构体等数据类型的大小。例如,下面的代码演示了如何使用sizeof计算一个char类型数组的大小:
char arr[10];
printf("Size of char array: %zu bytes\n", sizeof(arr));
输出结果为:
Size of char array: 10 bytes
补充1:
sizeof 在计算大小的时候是根据类型推算的;sizeof 的操作数如果是一个表达式,则表达式不参与计算;
sizeof (操作符的结果在编译结束后就已经有结果了,而表达式的计算是在生成 可执行程序 后才开始计算或者运算的)
例如下面的代码:
//sizeof 在计算大小的时候,其实是根据类型推算的
//sizeof的操作数如果是一个表达式,表达式的不参与计算的!!!
int main()
{
short s = 10;//占2个字节
int i = 2; //占4个字节
int n = sizeof(s = i + 4);//截断
printf("%d\n", n);//2
printf("%d\n", s);//
return 0;
}
运行结果为
2
10
补充2:sizeof(数组名),数组名表示整个数组,这里sizeof 计算的是整个数组的大小,单位是字节。
补充3:在除main() 以外的函数内部使用sizeof(数组名)的时候,这里的数组名表示一个地址。
strlen
strlen是一个C语言标准库函数,包含在头文件<string.h>中。它用于计算字符串的长度,不包括空字符(‘\0’)。这个函数接受一个字符串作为参数,并返回该字符串的长度。
例如,下面的代码演示了如何使用strlen计算一个字符串的长度:
char str[] = "Hello, world!";
printf("Length of str: %zu\n", strlen(str));
输出结果为:
Length of str: 12
可以看到,strlen返回的结果是字符串中实际字符的数量,不包括空字符。
需要注意的是,strlen只能用于计算字符串的长度,不能用于计算其他类型的数据的大小。另外,strlen在计算字符串长度时需要遍历整个字符串,直到遇到空字符为止,所以如果字符串中存在空字符(‘\0’),可能会产生意外的结果。
对比
举例说明:
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = "Hello,world!";
int a = sizeof(str);
int b = strlen(str);
printf("%d\n",a);
printf("%d\n",b);
return 0;
}
输出结果为:
13
12
这是因为sizeof计算的是整个数组的所占的字节大小,str[]数组是字符类型的数组,一个字符占一个字节的大小,一共有13个字符(10个字母,2个标点,1个’\0’),所以a的值是13;而strlen只计算字符串的长度,遇到‘\0’就停止计算,所以b的值是12。