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位吗?
怎么得出来的 展开
{
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位吗?
怎么得出来的 展开
6个回答
展开全部
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;
}
展开全部
对,对!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打住了……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
答:是的
为什么答案是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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你好 首先你的输出有错误 少了一个 , 应该是printf("%d",strlen(a)); 然后 strlen 数组不是求首地址的 它求的是a这个字符串的长度。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询