sizeof与strlen的区别与用法

sizeof 与 strlen 对应的概念一直没有弄仔细,弄明白,这次开个专题主要解决这几类问题


主要参考网上以及定义来解决


一、定义


sizeof:在Pascal语言中,sizeof是一种内存容量度量函数(主要偏重于内存容量),功能是返回一个变量和类型的大小(以字节为单位),因此在C语言中,sizeof主要是判断一个数据类型或者表达式长度的运算符,其运算是在编译阶段进行的

strlen:strlen所做的是一个计数器的工作,他从内存的某个位置(可以使字符串的开头,中间的某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到字符串结束符“/0”为止,然后返回计数值(长度不包含“/0”)。

二、区别

1)strlen函数求的是字符串的实际长度,如果只定义而没有赋初值,那么求得结果是不确定的,他会一直扫描。指导遇到/0字符为止
char aa[10];cout<<strlen(aa)<<endl; //结果是不定的
char aa[10]={'\0'};
 cout<<strlen(aa)<<endl; //结果为0
char aa[10]="jun"; 
cout<<strlen(aa)<<endl; //结果为3



但是sizeof()返回的是变量声明所占内存数,不是实际长度,另外sizeof不是函数,是一个取字节运算符。strlen是函数
sizeof(aa) 返回10
	int a[10]; sizeof(a) 返回40 (根据语言int型 c/c++由编译器决定是两个或四个 java 是四个)

	char* ss = "0123456789";
	sizeof(ss) 结果 4>>>>ss是指向字符串常量的字符指针,sizeof 获得的是一个指针的值所占的空间,应该是长整型的,所以是4

	sizeof(*ss) 结果 1>>>> *ss是第一个字符 其实就是获得了字符串的第一位'0' 所占的内存空间,是char类型的,占了 1 位

	char Array[3] = {'0'};
	sizeof(Array) == 3;
	char *p = Array;
	strlen(p) == 1;//sizeof(p)结果为4//这里的p实际是一块内存,因此这是一个昌整型,因此是4
	在传递一个数组名到一个函数中时,它会完全退化为一个指针

        char ss[] = "0123456789";
	sizeof(ss) 结果 11 ===》ss是数组,计算到\0位置,因此是10+1,那么strlen计算到/0的位置位置,那么strlen(ss)=10
	sizeof(*ss) 结果 1 ===》*ss 是第一个字符


2、⒈sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。
该类型保证能容纳实现所建立的最大对象的字节大小。


⒉sizeof是取字节运算符(关键字),strlen是函数。


⒊sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值