不知道这个问题有人问没???

猪头小哥 2011-11-07 10:33:44
#include <stdio.h>
#include <string.h>

int main()
{
char a[1000];
int i;
for(i = 0; i < 1000; i++)
{
a[i] = -1 - i;
}
printf("%d\n",strlen(a));
return 0;
}
答案是255 希望回答的人能简单明了点~~~非常感谢~~~
...全文
101 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamnobody 2011-11-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhutou100hao 的回复:]
好像不对 应该是a[255] = 0;应该strlen()遇到\0就停止 不会算上这个的 是吧??
[/Quote]

的确没有算上这个,所以才为 255;
是从a[0]开始算的。a[0]到a[254];一共有255个char.
猪头小哥 2011-11-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 mingliang1212 的回复:]

引用 2 楼 zhutou100hao 的回复:
不是遇到\0才停止的么??怎么遇到0就停止了??

'\0'的值就是0;
[/Quote]
嗯嗯 知道了~~
iamnobody 2011-11-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhutou100hao 的回复:]
不是遇到\0才停止的么??怎么遇到0就停止了??
[/Quote]
'\0'的值就是0;

猪头小哥 2011-11-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 cai0538 的回复:]

首先明确以下两点:
1)strlen函数是以字符串中的'\0'来判断字符串是否到末尾的,'\0'对应的十进制为0;
2)char占字节数为1,表示的数值范围为-128到127.
具体到该题,a[i] = -1 - i;当i=254时,会给a[i]赋值0(因为减去254转了一圈刚好到0).当然i=254以后a[i]也会被复制,但是利用strlen来求字符串数组的长度时,当找到a[254]=0……
[/Quote]
好像不对 应该是a[255] = 0;应该strlen()遇到\0就停止 不会算上这个的 是吧??
编程点滴 2011-11-07
  • 打赏
  • 举报
回复
由于char类型的字符对应是数值是0~255,照这个循环下去,-256其实就是字符'\0',因为-256+256=0,二次循环,刚好就是字符'\0',所以就得到结果255了。
cai0538 2011-11-07
  • 打赏
  • 举报
回复
首先明确以下两点:
1)strlen函数是以字符串中的'\0'来判断字符串是否到末尾的,'\0'对应的十进制为0;
2)char占字节数为1,表示的数值范围为-128到127.
具体到该题,a[i] = -1 - i;当i=254时,会给a[i]赋值0(因为减去254转了一圈刚好到0).当然i=254以后a[i]也会被复制,但是利用strlen来求字符串数组的长度时,当找到a[254]=0时,默认已经到了字符串的末尾,所以会返回255,即254+1.因为数组的下标是从0开始的啊!
希望能解除楼主的疑惑!
猪头小哥 2011-11-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 whoami1978 的回复:]

当i=255时
a[i]=-1-i=-256;
char范围为0~255(输出范围-128~127),当它赋值为-256时,它自动转换为0
而strlen是判以0为结尾的
所以 strlen(a)结果为255;
[/Quote]
char范围为0~255(输出范围-128~127)这句话是什么意思??现在题目中的范围不就是-128~127么??
zxjluohe 2011-11-07
  • 打赏
  • 举报
回复
你跟进去看看,255的值是0,strlen认为a已经结束
whoami1978 2011-11-07
  • 打赏
  • 举报
回复
当i=255时
a[i]=-1-i=-256;
char范围为0~255(输出范围-128~127),当它赋值为-256时,它自动转换为0
而strlen是判以0为结尾的
所以 strlen(a)结果为255;
猪头小哥 2011-11-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mingliang1212 的回复:]

char a[1000];
int i;
for(i = 0; i < 1000; i++)
{
a[i] = -1 - i;
}

i是int 类型的, -1 - i 也是int类型的。a[i] = -1 - i;这一句实际上是把 -1 - i;得到的结果的低8位赋值给a[i];当-1 - i的低8位都为0时,a[i];就为0;
当 i = 255时。-1 - i = 0xff……
[/Quote]不是遇到\0才停止的么??怎么遇到0就停止了??还有 就是数字在计算机中是用源码还是用的补码方式存储的~~
iamnobody 2011-11-07
  • 打赏
  • 举报
回复
char a[1000];
int i;
for(i = 0; i < 1000; i++)
{
a[i] = -1 - i;
}

i是int 类型的, -1 - i 也是int类型的。a[i] = -1 - i;这一句实际上是把 -1 - i;得到的结果的低8位赋值给a[i];当-1 - i的低8位都为0时,a[i];就为0;
当 i = 255时。-1 - i = 0xffff00;
所以a[255] == 0;
所以strlen(a) == 255;

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧