sizeof是操作符,不是函数。它后面的()并不是必须的,没有歧意时就不必写上了。sizeof操作符计算的是系统为它后面的变量或类型名分配的空间大小,无论其中是否存储了有用数据。
strlen()是库函数,()中必须是字符串指针或字符串常量,它返回的是检测对象中第一个'\0'前的字符个数,不含'\0'。
下面的代码可能对此解惑:
//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
#include "string.h"
int main(void){
char s[50]="1234",p[100]={'f','j','k','d','s','a','l','\0','1','2','3','4','5','\0'};
printf("sizeof(s) = %d\n",sizeof s);//这里s没有加(),也正确
printf("strlen(s) = %d\nstrlen(p) = %d\n",strlen(s),strlen(p));
//上句检测p时遇到第一个'\0'就结束了
return 0;
}
sizeof是关键字不是函数,用来求对象或类型所占的字节数,
而strlen只是用来求字符串长度的。
比如
sizeof int(也可以是sizeof(int))用来求int所占字节数,不能用strlen求。
int a[10]; sizeof(a) 求数组a所占字节数
char s[10] = "Hello";则strlen求得的是5,sizeof是10
sizeof获取的是内存大小,strlen得到的是字符串内容长度。这个是本质区别。
比如 char a[10]={"1234"} sizeof(a)的返回值为10 ,而strlen(a) 的返回值则为4.
两者都是返回字节数,
具体讲前者返回的是字节数,而后者返回的是字符数;
其次,sizeof返回的数量包括最后的结束符'\0',而strlen则没有。
strlen
是返回字符串的长度。
而sizeof,却是用来取得变量或类型所占用的内存大小的。
这个a数组的字符串长度为4(末尾的\0是不计入字符串长度的),但a是10个单位的char型,它占用的内存空间是10*sizeof(char),为10.
sizeof
返回的数量的单位是Byte.