一、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"
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;
}