永发信息网

c语言strlen的问题(这个答案为什么是4)

答案:5  悬赏:70  手机版
解决时间 2021-05-07 08:46
#include<stdio.h>
void main()
{
char a[]={'a','b','c'};
printf("%d",strlen(a));
}
最佳答案

extern int strlen(char *s)函数其实返回的是以s为首地址,0字符结束的这段内存的大小,


至于楼上说的我认为都不恰当;可以这么给您举例


char a[] = {0, 'a', 'b', 'c'};


如果使用strlen(a);那么得到的将是0,因为以a为首地址的字符就是0,所以就只有0个,


对于char a[] = {'a', 'b', 'c'};使用strlen(a);得到4的问题,其实得到的值是一个随机值,但是这个值肯定是大于等于3的,因为有可能以a为首地址,接下去的内存出了跟了abc这3个字符,之后接的不一定是0字符,有可能再接了几个字符(不管是什么,只要不是0),那它返回的肯定就不是3了,但是如果您使用sizeof(a)去查看的话它得到的值就是3,所占内存为3字节,而每个字符占1个字节


而对于char a[] = {"abc"};这个问题,您放心的使用strlen函数吧,因为这个是C风格的字符串,会自动在末尾添加一个0字符,所以您可以用sizeof(a);查看,它得到的值是4,也就是abc这3个字符所占的3个字节再加上添加的末尾那个0字符所占的内存,如果您有什么不明白的可以给我QQ讨论。


谢谢采纳!

全部回答

用单引号 {'a', 'b', 'c'} 代表存储的是一个个的字符组成的字符数组

而用双引号 {"abc"} 代表存储的是一个字符串

C语言里面规定字符数组最后一维存储的是\0

而字符串没有这样的规定

char a[]={'a','b','c'};的定义字符串后系统自动加'\0',strlen()测量a[]中的字符的个数,将'\0'默认为a[]的字符处理,所以是4。char a[4]={"abc"};定义字符串strlen()只是测量"abc"字符串的实际长度而忽略末尾的结束字符。
strlen是计算字符串长度的你数组中只有3个字符当然返回的是3了,这3个程序数组内的元素不都是“a,b,c”么当然是3了, 原型:extern int strlen(char *s); 计算字符串s的(unsigned int型(返回一个int类型))长度, 返回s的长度,不包括结束符NULL。
后面有一个结束字符0,标记字符串结束
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
蜀门 中坐骑凤凰和麒麟 哪来的
有点些好玩,参与性强的班级活动
宿北大战纪念馆游客服务中心怎么去啊,有知道
罗定市云浮罗城市职教中心地址在哪,我要去那
怀孕脸上长了些红点
为什么我的DNF游戏每次登陆都要更新?
邮递从福建 或 香港至上海要多久
电吉他好学还是贝斯好学?
有胃炎、贫血的人经期可以喝中药吗?
福美春茗茶石井店怎么去啊,有知道地址的么
三星T1688语言资源怎么下载
能给我侠盗飞车的作弊器吗?
DNF中的狂战怎么加点?
狗狗的体毛有多长
什么时候能在点亮标?
推荐资讯
个人名字藏头诗
南京农技农资溧水连锁地址在什么地方,想过去
QQlive怎么一颤一颤的?
帮我找一张全省作文第一名的奖状照片(名字要
昨晚星海夜航抽中的手机号有152****3841么?
谁帮我算算命??
诺基亚5630xm下载软件问题,急急!
甘南州09年教师资格证考试时间
丝路英雄君士坦丁堡的地图在哪打?
始祖洛克人下载
中规车和美规车,提速有差别吗
DNF台服服务器维修或无法连接
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?