C语言中sizeof和strlen的区别与联系
在学习C语言的时候发现经常将sizeof和strlen弄混淆,今天有遇到这个问题,所以查了一些资料,将他们总结在下面,虽然不是很全,但已经可以通过他们之间的比较来区开分了
strlen:一般用来统计字符串中字符的个数
sizeof:一般统计对象所占的单元(字节)的个数,一般来说,般以8位二进制作为一个存储单元,所以字节数一般等于存储单元的个数。
比较项目 | sizeof | strlen |
返回值 | 整数 | 整数 |
参数 | 类型、数组、指针‘函数 | 数组 |
是否包含“\0” | 包含 | 不包含(以“\0结束”) |
本质 | 运算符 | 函数 |
计算时间 | 编译 | 运行 |
一般用途 | 统计存储单元个数 | 统计字符串中字符的个数,包括空格 |
sizeof用法注意:1、用于测定类型所占存储单元时,类型必须用sizeof(类型)
2、用于数组时,表示数组所占的存储空间的大小,可以不用(),即:sizeof(name) = sizeof name,name为数组
#include <stdio.h>
#include <string.h>
#define PRAISE "What a super marvelous name!"
int main(void)
{
char name[40];
printf("What's your name?\n");
scanf("%s",name);
printf("Hello,%s.%s\n",name,PRAISE);
printf("Your name of %d letters occupies %d memory cells.\n",strlen(name),sizeof(name));
printf("The phrase of praise has %d letters",strlen(PRAISE));
printf("and occupies %d cells.\n",sizeof(PRAISE));
return 0;
}
上面为C Primer Plus上的一段示例代码可以比较出他们的不同之处
int sum(int ar[], int n)
{
int i;
int total = 0;
for(i=0;i<n;i++)
{
total += ar[i];
}
printf("The size of ar is %zd bytes.\n",sizeof ar);
return total;
}
注意:sizeof后面的对象如果是实参数组名,则结果为该数组的存储空间,但sizeof如果为一个指向数组首元素的指针,则对于4字节地址的计算机系统,指针的大小为4字节
如以上的sum函数,ar是一个指向数组的首元素的指针,所以该函数输出的结果为4。