strlen(a) 用strlen计算各类型数组长度的时候是怎么来计算的?

intmain(){chara[1000];inti;for(1=0;i<1000;i++){a[i]=-1-i;}printf("%d",strlen(a));retu... int main()
{
char a[1000];

int i;

for(1=0;i<1000;i++)

{

a[i]= -1-i;
}

printf("%d",strlen(a));

return 0;

}

这道题的答案为什么等于255?
展开
 我来答
hwd0312
2015-10-25 · TA获得超过4336个赞
知道小有建树答主
回答量:1043
采纳率:100%
帮助的人:170万
展开全部

C中strlen只是返回数组中字符串的个数,并不一定是数组的长度。

strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含“\0”)。

extern unsigned int strlen(char *s);

在Visual C++ 6.0中,原型为size_t strlen(const char *string); ,其中size_t实际上是unsigned int,在VC6.0中可以看到这样的代码:typedef unsigned int size_t; 。

头文件:string.h

格式:strlen (字符数组名)

功能:计算给定字符串的(unsigned int型)长度,不包括'\0'在内

说明:返回s的长度,不包括结束符NULL。

例子:

#include<string.h>
#include<stdio.h>
int main(void)
{
    char*s="GoldenGlobalView";
    printf("%s has %d chars",s,strlen(s));
    getchar();
    return 0;
}
冯晨蓓不默
2019-11-03 · TA获得超过3万个赞
知道小有建树答主
回答量:1.1万
采纳率:35%
帮助的人:946万
展开全部
C中strlen只是返回数组中字符串的个数,并不一定是数组的长度。
strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含“\0”)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ququqiqi
2014-11-08 · TA获得超过1110个赞
知道小有建树答主
回答量:259
采纳率:0%
帮助的人:232万
展开全部
strlen 返回字符数组中第一个'\0'(字符0)与数组首地址的偏移量
本题中a[0]到a[254]中的内容均不为0,而a[255]被赋值为-1-255=-256,隐式转换为char类型则为0
因为int型的-256为11111111,11111111,11111111,00000000(2进制)
隐式转换为char类型从而变成00000000(2进制)=0
所以strlen返回255-0=255
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式