3个回答
展开全部
首先要明白,sizeof不是函数,而是操作符;strlen是函数。
操作符sizeof用来判断对象、类型所占用的内存空间的字节数,strlen是计算一个字符串以字节计的长度。如:sizeof(int)、sizeof(double)、sizeof(char)等是合法的,可以计算出int、double、char这些类型所占用的字节数分别是4、8、1,而用strlen则是非法的。再如:若有char a[20]="123";,那么,strlen(a)的结果是3,而sizeof(a)的结果是20;前者是字符串“123”的长度,后者是为数组a分配的内存空间。还有:当计算一个指向字符串的指针时,sizeof得到的是指针本身的长度即固定为4(32位机),而strlen得到的是指针指向的字符串的长度。如:char a[20]="1234567",*p=a;,则,sizeof(p)=4,而strlen(p)=7。似乎复杂了点。记住一个原则就好判断:操作符sizeof用来计算系统为对象本身分配的空间(以字节计),函数strlen用来计算字符串的长度(以字节计)。
操作符sizeof用来判断对象、类型所占用的内存空间的字节数,strlen是计算一个字符串以字节计的长度。如:sizeof(int)、sizeof(double)、sizeof(char)等是合法的,可以计算出int、double、char这些类型所占用的字节数分别是4、8、1,而用strlen则是非法的。再如:若有char a[20]="123";,那么,strlen(a)的结果是3,而sizeof(a)的结果是20;前者是字符串“123”的长度,后者是为数组a分配的内存空间。还有:当计算一个指向字符串的指针时,sizeof得到的是指针本身的长度即固定为4(32位机),而strlen得到的是指针指向的字符串的长度。如:char a[20]="1234567",*p=a;,则,sizeof(p)=4,而strlen(p)=7。似乎复杂了点。记住一个原则就好判断:操作符sizeof用来计算系统为对象本身分配的空间(以字节计),函数strlen用来计算字符串的长度(以字节计)。
展开全部
当然有
如果是指针的话,sizeof是4,也就是指针的长度,strlen检测这个地址到后面的结束符直接的长度
如果是数组,那么sizeof是这个数组的长度,strlen还是检测这个数组首地址到结束符之间的长度
如果是指针的话,sizeof是4,也就是指针的长度,strlen检测这个地址到后面的结束符直接的长度
如果是数组,那么sizeof是这个数组的长度,strlen还是检测这个数组首地址到结束符之间的长度
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1,sizeof是编译时计算,strlen是运行时计算
2,sizeof只能对确定大小的任意内容缓冲区的大小进行计算,strlen只能对以\0结尾的字节串计算长度,返回到\0为止的字节串的长度(不包括\0)
2,sizeof只能对确定大小的任意内容缓冲区的大小进行计算,strlen只能对以\0结尾的字节串计算长度,返回到\0为止的字节串的长度(不包括\0)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询