strlen与sizeof的区别

一、strlen与sizeof的区别:

    1、strlen计算字符串的具体长度(只能是字符串),不包括字符串结束符。返回的是字符个数。

    2、sizeof计算声明后所占的内存数(字节大小),不是实际长度。

    3、sizeof是一个取字节运算符,而strlen是个函数。

    4、sizeof的返回值=字符个数*字符所占的字节数,字符实际长度小于定义的长度,此时字符个数就等于定义的长度。若未给出定义的大小,分类讨论,对于字符串数组,字符大 小等于实际的字符个数+1;对于整型数组,字符个数为实际的字符个数。字符串每个字符占1个字节,整型数据每个字符占的字节数需根据系统的位数类确定,32位占4个字节。       

二、代码示例:

  1. #include “stdafx.h”  
  2. #include “stdio.h”  
  3. #include “string.h”  
  4.   
  5. int main(int argc, char* argv[])  
  6. {  
  7.     //字符串数组方式  
  8.     int a1;  
  9.     int b1;  
  10.     char str1[11]=“0123456789”;//字符串数组定义时注意为字符串个数+1  
  11.     a1=sizeof(str1);//a1=11,统计到字符串结束符’\0’为止  
  12.     b1=strlen(str1);//b1=10,统计到字符串结束符之前  
  13.     printf(”a1=%d,b1=%d\n”,a1,b1);  
  14.       
  15.     //字符串指针方式  
  16.     int a2;  
  17.     int b2;  
  18.     int c2;  
  19.     char *str2=“0123456789”;  
  20.     a2=sizeof(str2);//a2=4;str为指向字符串常量的字符串指针  
  21.     b2=strlen(str2);//b2=10;  
  22.     c2=sizeof(*str2);//c2=1;*str2表示第一个字符  
  23.     printf(”a2=%d,b2=%d,c2=%d\n”,a2,b2,c2);  
  24.   
  25.     //未定义字符串大小方法  
  26.     int a3;  
  27.     int b3;  
  28.     char str3[]=“0123456789”;  
  29.     a3=sizeof(str3);//a3=11;  
  30.     b3=strlen(str3);//b3=10;  
  31.     printf(”a3=%d,b3=%d\n”,a3,b3);  
  32.   
  33.     //整型数组,strlen只能用于字符串  
  34.     int a4;  
  35.     int a[]={1,2,3,4,5,6,7,8,9,0};  
  36.     a4=sizeof(a);//a4=字符个数*字节数  
  37.     printf(”a4=%d\n”,a4);  
  38.     return 0;  
  39. }  
#include "stdafx.h"




include "stdio.h"

include "string.h"

int main(int argc, char* argv[])
{
//字符串数组方式
int a1;
int b1;
char str1[11]="0123456789";//字符串数组定义时注意为字符串个数+1
a1=sizeof(str1);//a1=11,统计到字符串结束符'\0'为止
b1=strlen(str1);//b1=10,统计到字符串结束符之前
printf("a1=%d,b1=%d\n",a1,b1);

//字符串指针方式
int a2;
int b2;
int c2;
char *str2="0123456789";
a2=sizeof(str2);//a2=4;str为指向字符串常量的字符串指针
b2=strlen(str2);//b2=10;
c2=sizeof(*str2);//c2=1;*str2表示第一个字符
printf("a2=%d,b2=%d,c2=%d\n",a2,b2,c2);

//未定义字符串大小方法
int a3;
int b3;
char str3[]="0123456789";
a3=sizeof(str3);//a3=11;
b3=strlen(str3);//b3=10;
printf("a3=%d,b3=%d\n",a3,b3);

//整型数组,strlen只能用于字符串
int a4;
int a[]={1,2,3,4,5,6,7,8,9,0};
a4=sizeof(a);//a4=字符个数*字节数
printf("a4=%d\n",a4);
return 0;
}

注意下面的长度:

  1. #include “stdafx.h”  
  2. #include “stdio.h”  
  3. void fun(int a[100])  
  4. {  
  5. printf(”%d\n”,sizeof(a));//结果为4,而非400  
  6. }  
  7. void fun1(int *p)  
  8. {  
  9. printf(”%d\n”,sizeof(p));//结果为4  
  10. }  
  11.   
  12. int main(int argc, char* argv[])  
  13. {  
  14.       
  15.     int a[10];  
  16.     int *b[10];  
  17.     int (*c)[10];  
  18.     int *p;  
  19.     int i[100];  
  20.     int *q=i;  
  21.     printf(”%d\n”,sizeof(a));//40=4*10  
  22.         printf(”%d\n”,sizeof(b));//指针数组,装有10个指向整型变量的指针,本质上还是个数组,故其大小为10*4=40  
  23.         printf(”%d\n”,sizeof(c));//数组指针,大小为4  
  24.     printf(”%d\n”,sizeof(p));//指针大小,不管什么类型的指针,都占4个字节大小  
  25.         fun(i);//4 不是400  
  26.     fun(q);//4 不是400  
  27.     return 0;  
  28. }  
#include "stdafx.h"




#include "stdio.h" void fun(int a[100]) { printf("%d\n",sizeof(a));//结果为4,而非400 } void fun1(int *p) { printf("%d\n",sizeof(p));//结果为4 } int main(int argc, char* argv[]) { int a[10]; int *b[10]; int (*c)[10]; int *p; int i[100]; int *q=i; printf("%d\n",sizeof(a));//40=4*10 printf("%d\n",sizeof(b));//指针数组,装有10个指向整型变量的指针,本质上还是个数组,故其大小为10*4=40 printf("%d\n",sizeof(c));//数组指针,大小为4 printf("%d\n",sizeof(p));//指针大小,不管什么类型的指针,都占4个字节大小 fun(i);//4 不是400 fun(q);//4 不是400 return 0; }








  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值