C语言问题 关于strlen

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

printf那条里面a指的是a数组首元素的地址吗?
为什么答案是255.意思是有255位吗?
怎么得出来的
展开
 我来答
479701998
2013-08-25 · TA获得超过626个赞
知道小有建树答主
回答量:340
采纳率:25%
帮助的人:243万
展开全部

a是首元素地址没错。

但不是说有255位!

首先printf中你少了个逗号...

你可以尝试着把a中的字符打印出来检查一下。可以看到当i=255的时候,-1-255=-256,最低位的8个bit全部为0,在程序中被判定为'\0',也就是字符串的结束符,这会使得在用strlen的时候只统计到该位为止的长度。

除此之外,当i=511和i=767的时候,在a[511]、a[767]中也被赋值为了'\0'。

通过如下的语句可以检测出结束符的位置:

int main(i)
{
  char a[1000];
  int i;
  for(i=0;i<1000;i++)
  {
   a[i]=-1-i;
   if (a[i]=='\0')
   {
    printf("%d\n",i);
   }
  }
  printf("%d",strlen(a));
  system("pause");
 return 0;
}

 

White_MouseYBZ
2013-08-25 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6617万
展开全部
对,对!a是首元素地址。255位也对,可是为什么呢?是这样的:a存放的数的范围是-128~127,-1是11111111;我们看,i从0变到1000要经过i=127,下一次就是i=128了。可是128已经超出a能存放的范围了,那么存入a[128]的是什么数呢?是-1-128=-129!-129超出了a能存数据的最小限-128,所以要“截断”存入,即只存入最低字节01111111,这实际上是127!同样,下一个i=129时,得a[129]=-1-129=-130=(截断后)01111110=126……依次类推,a[130]=125、a[131]=124、a[132]=123……a[255]=0。0就是‘\0',是字符串的结束符,所以用strlen(a)测得的长度为a[0]~a[254]的长度共255个元素!后面虽然i还在增长,还可以遇到a[i]=0的时候,但strlen(a)已测不到那里了,被第一个0打住了……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
220111432
2013-08-25 · TA获得超过163个赞
知道答主
回答量:88
采纳率:0%
帮助的人:96.3万
展开全部
i=0时 a[0]=-1
i=1 a[1]=-2
i=2 a[2]=-3

以此类推,
i=127 a[127]=-128
关键点:i=128 a[128]不等于-129,因为,带符号的char类型的表示范围为[-128,127],因此,a[128]=127 (补码的表示)
i=129 a[129]=126
i=130 a[130]=125

以此类推
i=255 a[255]=0 (字符串结束标志)
i=256 到999就不用管了 所以字符串长255
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kaixingui2012
2013-08-25 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6419万
展开全部
printf那条里面a指的是a数组首元素的地址吗?

答:是的
为什么答案是255.意思是有255位吗?

答:是的
怎么得出来的?

for(i=0;i<1000;i++)
{
a[i]=-1-i;
}
-1 - 1=-2
-1 -2 = -3
以以类推
-1-255 = -256 这个整数占四个字节,最后一个字节是全0 , 赋值给char类型变量,只会取最后一个字节,因此,a[255]=0
0就是字符串的结束符,Strlen()函数就是从数组首地址到字符串结束符的字符个数,因此,返回255
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
易碎朝阳
2013-08-25 · 超过13用户采纳过TA的回答
知道答主
回答量:44
采纳率:0%
帮助的人:26.5万
展开全部
你好 首先你的输出有错误 少了一个 , 应该是printf("%d",strlen(a)); 然后 strlen 数组不是求首地址的 它求的是a这个字符串的长度。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式