当前位置:网站首页>strlen跟sizeof区别
strlen跟sizeof区别
2022-07-30 12:51:00 【qq_25427995】
关于 strlen 与 sizeof 的区别:
strlen 是函数,sizeof 是运算符。
strlen 测量的是字符的实际长度,以’\0’ 结束(不包含’\0’ )。而sizeof 测量的是字符的分配大小,如果未分配大小,则遇到’\0’ 结束(包含’\0’ ,也就是strlen测量的长度加1),如果已经分配内存大小,返回的就是分配的内存大小。
比如:
char str[] = “Hello World”;
char str1[100] = “Hello World”;
cout << strlen(str) << endl;
cout << sizeof(str) << endl;
cout << sizeof(str1) << endl;
3.但是在子函数中,ziseof 会把从主函数中传进来的字符数组当作是指针来处理。指针的大小又是由机器来决定,而不是人为的来决定的。
#include
#include
#include
using namespace std;
void fun(char str[10])
{
cout << sizeof(str) << endl;
}
int main()
{
char str[] = “Hello World”;
fun(str);
return 0;
}
4.我们知道字符数组的初始化一次性赋值,也可以逐个赋值。可以指定数组的大小,也可以不指定数组长度。
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = “hello”;
char str2[] = {‘h’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\0’};
char str3[] = {‘h’, ‘e’, ‘l’, ‘l’, ‘o’};
printf("str1:%s\n",str1);
printf("str2:%s\n",str2);
printf("str3:%s\n",str3);
printf("str1:%d\n", strlen(str1));
printf("str2:%d\n", strlen(str2));
printf("str3:%d\n", strlen(str3));
return 0;
}
这是为什么呢?
我们知道字符串是以 ‘\0’ 为结束标志的,所以char str1[ ] = “hello” 等效于char str2[ ] = {‘h’ , ‘e’ , ‘l’ , ‘l’ , ‘o’ , ‘\0’} 。strlen函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个’\0’,如果你只定义没有给它赋初值,这个结果是不定的,它会从首地址一直找下去,直到遇到’\0’停止。而如果不在字符数组初始化的时候加上\0,那么strlen 得到的值就不是正确的数值,打印出来的结果也不是想要的结果。因此我们要避免这种情况,在初始化的时候要记得加上 \0,或者一次性赋初值。
5.strlen的结果要在运行的时候才能计算出来,是用来计算字符串的长度,不是类型占内存的大小。而大部分编译程序在编译的时候就把sizeof计算过了是类型或是变量的长度。
6.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以’‘\0’'结尾的。
原文链接:https://blog.csdn.net/zhengqijun_/article/details/51815081
边栏推荐
- 漫谈金丝雀部署(Canary Deployment)
- PyQt5快速开发与实战 8.6 设置样式
- [ASP.NET Core] Dependency Injection for Option Classes
- Lake storehouse which electricity (2) of the project: project using technology and version and the environment
- MySQL【排序与分页】
- 缓存一致性
- Dolphinscheduler stand-alone transformation
- How to solve the problem that the page does not display the channel configuration after the EasyNVR is updated to (V5.3.0)?
- R语言ggplot2可视化:使用ggpubr包的ggboxplot函数可视化分组箱图、使用ggpar函数改变图形化参数(xlab、ylab、改变可视化图像的坐标轴标签内容)
- 数字化时代,寻求企业财务转型路径的最优解
猜你喜欢
随机推荐
Jackson 的JAR包冲突问题
常见的云计算安全问题以及如何解决
Xms Xmx PermSize MaxPermSize 区别
什么是驱动程序签名,驱动程序如何获取数字签名?
Using Baidu EasyDL to realize the recognition of the chef's hat of the bright kitchen
干货分享:小技巧大用处之Bean管理类工厂多种实现方式
我又造了个轮子:GrpcGateway
EasyNVS云管理平台功能重构:支持新增用户、修改信息等
DeFi 巨头进军 NFT 领域 用户怎么看?
EasyNVS cloud management platform function reconstruction: support for adding users, modifying information, etc.
私有化部署的即时通讯平台,为企业移动业务安全保驾护航
双击Idea图标打不开——解决办法
EasyNVR更新版本至(V5.3.0)后页面不显示通道配置该如何解决?
物理服务器与虚拟机:主要区别和相似之处
58. 最后一个单词的长度
电流电压采集模块DAM-6160
What are the hard-core upgrades and applications that cannot be missed in Greenplum 6.0?
CMake library search function does not search LD_LIBRARY_PATH
【记一个kaggle划水比赛】PetFinder.my - Pawpularity Contest 宠物预测
IDEA 重复代码快速重构(抽取重复代码快捷键)









