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 展开
#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 展开
4个回答
展开全部
区别如下:
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。
展开全部
char name[]="nike" ;
sizeof(name)=5
如果数组定义成int,就不能用scanf("%s",name);来输入字符串了,因为这两个类型是不同的。%s只能输入char字符串数据
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!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
sizeof运算符计算的是操作数类型的大小,只是数组会乘以长度而已,和传入的具体内容无关。
要强行输出5的话那就sizeof("nike")吧……
要强行可以计算补了0长度的那就strlen+1
要强行输出5的话那就sizeof("nike")吧……
要强行可以计算补了0长度的那就strlen+1
追问
我的意思不是一定要输入nike 然后得5
而是输入任意字符串 程序给出相应的长度 比如bob得4 等 这样能做到吗
追答
重新看最后一句,不喜欢这种形式的调用就自己写函数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
\0 只在char型数组中才有。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询