一、strlen与sizeof的区别:
1、strlen计算字符串的具体长度(只能是字符串),不包括字符串结束符。返回的是字符个数。
2、sizeof计算声明后所占的内存数(字节大小),不是实际长度。
3、sizeof是一个取字节运算符,而strlen是个函数。
4、sizeof的返回值=字符个数*字符所占的字节数,字符实际长度小于定义的长度,此时字符个数就等于定义的长度。若未给出定义的大小,分类讨论,对于字符串数组,字符大 小等于实际的字符个数+1;对于整型数组,字符个数为实际的字符个数。字符串每个字符占1个字节,整型数据每个字符占的字节数需根据系统的位数类确定,32位占4个字节。
二、代码示例:
- #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;
- }
#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;
}
注意下面的长度:
- #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;
- }
#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; }