问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言中sizeof和strlen函数区别在哪?

发布网友 发布时间:2022-05-05 02:51

我来回答

1个回答

热心网友 时间:2022-06-28 18:13

一、sizeof
sizeof(...)是运算符,在头文件中typedef为unsigned
int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。
它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。
由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。
具体而言,当参数分别如下时,sizeof返回的值表示的含义如下:
数组——编译时分配的数组空间大小;
指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4);
类型——该类型所占的空间大小;
对象——对象的实际占用空间大小;
函数——函数的返回类型所占的空间大小。函数的返回类型不能是void。
二、strlen
strlen(...)是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化成指针了。
它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL;
1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned
int类型。
该类型保证能容纳实现所建立的最大对象的字节大小。
2.sizeof是算符,strlen是函数。
3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。
sizeof还可以用函数做参数,比如:
short
f();
printf("%d\n",
sizeof(f()));
输出的结果是sizeof(short),即2。
4.数组做sizeof的参数不退化,传递给strlen就退化为指针了。
5.大部分编译程序
在编译的时候就把sizeof计算过了
是类型或是变量的长度这就是sizeof(x)可以用来定义数组维数的原因
char
str[20]="0123456789";
int
a=strlen(str);
//a=10;
int
b=sizeof(str);
//而b=20;
6.strlen的结果要在运行的时候才能计算出来,时用来计算字符串的长度,不是类型占内存的大小。
7.sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。这是因为sizeof是个操作符不是个函数。
8.当适用了于一个结构类型时或变量,
sizeof
返回实际的大小,
当适用一静态地空间数组,
sizeof
归还全部数组的尺寸。
sizeof
操作符不能返回动态地被分派了的数组或外部的数组的尺寸
9.数组作为参数传给函数时传的是指针而不是数组,传递的是数组的首地址,
如:
fun(char
[8])
fun(char
[])
都等价于
fun(char
*)
在C++里参数传递数组永远都是传递指向数组首元素的指针,编译器不知道数组的大小
如果想在函数内知道数组的大小,
需要这样做:
进入函数后用memcpy拷贝出来,长度由另一个形参传进去
fun(unsiged
char
*p1,
int
len)
{
unsigned
char*
buf
=
new
unsigned
char[len+1]
memcpy(buf,
p1,
len);
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 养宠物的人遵守规则,是不是就能和别人平安相处呢? C语言 strlen()函数的问题 c++ strlen函数原型在哪? sizeof和strlen在c语言的区别是什么? 轻重坦克的区分标准 kv5重型坦克的介绍 在vc++编程中,strlen取字符串长度函数来自哪个文件? 有时在登录QQ时和申请游戏帐号时,为什么要填验证码?有什么用 P-1000超级坦克的发展过程 用哪种水果可以美白 P-1000超级坦克的介绍 QQ号登陆要输验证码是怎么回事? 用到strlen(函数,则应包含多少个头文件) qq安全中心填写资料中的手机验证码是什么? QQ安全中心绑定手机的验证码是做什么用的?拜托了各位 谢谢 超重型坦克的各国 QQ下载东西要填验证码,验证码是什么? c语言中strlen()库函数与stdio.h头文件问题??急着求解、 鼠式超重型坦克的介绍 p1000“巨鼠”式超重型坦克的相关数据 鼠式超重型坦克简介 strlen 函数的源代码 如何用Notepad++开发Python程序 PHP MYSQL 优化问题 如何更换银行卡和身份证 如何更换银行卡和身份证 梦见老太婆上吊 梦见好像在我家的老房子里有个老太太好像上吊死了,但是眼睛还睁着,只 梦见一个不认识的老太婆上吊差点死了,叫我救她,我却偏不就她? 梦见老人上吊抹脖子血看着我怎么解 梦见一对老人上吊死亡 梦见别人告诉我邻居老太上吊了? 梦见我女儿救下一个上吊的老太太好不好? 风的作者是唐代的罗隐其中哪两句诗写出了蜜蜂到处辛勤采蜜的情景? 峰 古诗 罗隐 《蜂》和《风》的全诗 写风的古诗为谁辛苦为谁甜诗句翻译 《风》这首诗? 古诗《峰》[唐]罗隐? 古诗《峰》[唐]罗隐中第几句暗喻诗人对不劳而获的人的讽刺与痛恨? 风唐代诗人罗隐这首诗写了什么景物?