sizeof 与 strlen 的区别
由于在项目中,经常需要判别变量、数组、字符串等字节长度,常常会用到sizeof 和 strlen, 有时候经常会弄混,故整理一下。
1. sizeof :
sizeof 运算符 返回一条表达式或一个类型名字所占的字节数。与众不同的一点是,sizeof 并不实际计算其运行对象的值。
Sales_data data , *p; sizeof(Sales_data);//存储Sales_data类型的对象所占的空间大小 sizeof(data);//同上 sizeof(p);//指针所占的空间大小,如果是64位系统,则为8 sizeof(*p);//p所指类型的空间大小,等价于 sizeof(Sales_data);sizeof(data) sizeof(data.revenue);//Sales_data的revenue成员对应类型的大小
注意:由于 sizeof并不实际计算器运行对象的值,故对于sizeof(*p),即使p是一个无效的指针,也没关系,在sizeof的运算对象中解引用一个无效指针仍然是一种安全的行为。
·对char或者类型为char的表达式执行sizeof运算,结果为1 ·对引用类型执行sizeof运算得到被引用对象所占空间的大小 ·对指针执行sizeof运算得到指针本身所占空间的大小//64位:8;32位:4 ·对解引用指针执行sizeof运算得到指针指向的对象所占空间的大小,指针不需有效 ·对数组执行sizeof运算得到整个数组所占空间的大小。注意:sizeof运算不会把数组转换成指针来处理 ·对string对象或vector对象执行sizeof运算值返回该类型固定部分的大小,不会计算对象的元素占用了多少空间
char *abc = "123"; char test[12]="123"; char test1[]="123"; cout<<sizeof(abc)<<endl; //输出8 64位,所以是8 ,指针长度 cout<<sizeof(test)<<endl; //输出12 数组长度,12个字节 cout << sizeof(test1)<<endl; //输出4 数组长度,后面加上一个空字符,一共4个
2. strlen
这个函数是C语言下面的函数,所谓的C标准库String 函数。作用:返回字符串的长度,空字符不计算在内。
char ca[] = {'C','+','+'}; cout << strlen(ca) << endl; // 错误 ca虽然是一个字符数组,但它不是以空字符作为结束的,有可能沿着ca在内存中的位置不断向前寻找,直到遇到空字符才停下来。
传入strlen函数的指针必须指向以空字符作为结束的数组;同类的函数有 strcmp, strcat, strcpy
char ca[] = {0x11,0x22,0x00,0x23}; cout<<strlen(ca)<<endl; // 输出2,因为遇到 0x00空字符
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端