strlen与sizeof的区别

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







评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值