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。
本文详细对比了C语言中的sizeof和strlen的功能与用法。sizeof用于获取对象占用的字节数,而strlen用于计算字符串长度,不含终止符。两者在参数、计算时机及应用场景等方面存在显著差异。
238

被折叠的 条评论
为什么被折叠?



