c语言sizeof和strlen的区别

我想探究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

区别如下:

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。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-09-22
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!

本回答被提问者采纳
第2个回答  2015-09-22
sizeof运算符计算的是操作数类型的大小,只是数组会乘以长度而已,和传入的具体内容无关。
要强行输出5的话那就sizeof("nike")吧……
要强行可以计算补了0长度的那就strlen+1追问

我的意思不是一定要输入nike 然后得5
而是输入任意字符串 程序给出相应的长度 比如bob得4 等 这样能做到吗

追答

重新看最后一句,不喜欢这种形式的调用就自己写函数

第3个回答  2015-09-22
\0 只在char型数组中才有。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网