c语言sizeof和strlen的区别

我想探究sizeof和strlen的区别于是下面两个程序#include<stdio.h>#include<string.h>intmain(void){charname... 我想探究sizeof和strlen的区别于是下面两个程序
#include<stdio.h>
#include<string.h>
int main(void)
{
char name [20];
int width;
printf("Please input your name.");
scanf("%s",name);
width=strlen(name);
printf("\"%d\"\n",width);
return 0;
}

上面的程序如果输入nike 结果为4
说明strlen()输出的是字符串长度 但如果

#include<stdio.h>
#include<string.h>
int main(void)
{
char name [20];
int width;
printf("Please input your name.");
scanf("%s",name);
width=sizeof(name);
printf("\"%d\"\n",width);
return 0;
}
输入nike得到20 当然我在一开始将数组长度设置成了20
但据我所知 sizeof会计入在字符串结尾有个不显示的\0 我想看看是不是真的
如果真的应该输出5
但我在一开始设置了数组长度 但如果我把[20]去掉 或把char改成int 程序就会出错 那我应该怎么做才能让程序输出5
展开
 我来答
帐号已注销
2021-10-15 · TA获得超过77.1万个赞
知道小有建树答主
回答量:4168
采纳率:93%
帮助的人:167万
展开全部

区别如下:

1、指代上的区别

(1)sizeof:用来获取字符串长度的导引,是处理字符串的重要工具。

(2)strlen:做的是一个计数器。

2、用法上的区别

(1)sizeof:sizeof( type_name ); // sizeof(type); 在编译时有效,而不是在运行时有效。

(2)strlen:extern unsigned int strlen(char *s); 返回s的长度,不包含终止符NULL。

定义

sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。

MSDN上的解释为:The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type(including aggregate types). This keyword returns a value of type size_t。

kaixingui2012
2015-09-22 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6459万
展开全部
char name[]="nike" ;
sizeof(name)=5

如果数组定义成int,就不能用scanf("%s",name);来输入字符串了,因为这两个类型是不同的。%s只能输入char字符串数据
追问
我的意思不是一定要输入nike   然后得5
而是输入任意字符串 程序给出相应的长度 比如bob得4 等 这样能做到吗
追答
sizeof()得到的是变量的存储空间!

如果你定义数组空间大小为20,如char s[20] ; 那得到的sizeof(s)就是20,而与你向其中存储多少数据无关。
你要想得到一个常量字符串的存储空间,就只能按上面的写法,char name[]="nike" ; 用常量字符串初始化一个不指定空间的数组,这样,数组就会按常量串来分配空间了,这时,sizeof(name)就起到了验证你的想法的功能了(验证\0的存在)。
如果不指定char name[]的空间大小,也不初始化,程序会报错的
如果定义成指针,char *name ; //则sizeof(name)永远是4!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e7129c0
2015-09-22 · TA获得超过843个赞
知道小有建树答主
回答量:263
采纳率:0%
帮助的人:195万
展开全部
sizeof运算符计算的是操作数类型的大小,只是数组会乘以长度而已,和传入的具体内容无关。
要强行输出5的话那就sizeof("nike")吧……
要强行可以计算补了0长度的那就strlen+1
追问
我的意思不是一定要输入nike   然后得5
而是输入任意字符串 程序给出相应的长度 比如bob得4 等 这样能做到吗
追答
重新看最后一句,不喜欢这种形式的调用就自己写函数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
萢萢i3
2015-09-22 · TA获得超过1.3万个赞
知道大有可为答主
回答量:1.7万
采纳率:71%
帮助的人:4686万
展开全部
\0 只在char型数组中才有。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式