您的位置:首页 > 编程语言 > C语言/C++

C语言中sizeof和strlen的区别与联系

2015-09-08 23:39 344 查看

C语言中sizeof和strlen的区别与联系

在学习C语言的时候发现经常将sizeof和strlen弄混淆,今天有遇到这个问题,所以查了一些资料,将他们总结在下面,虽然不是很全,但已经可以通过他们之间的比较来区开分了
strlen:一般用来统计字符串中字符的个数
sizeof:一般统计对象所占的单元(字节)的个数,一般来说,般以8位二进制作为一个存储单元,所以字节数一般等于存储单元的个数。
sizeof与strlen比较

比较项目

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: