自己写在51博客上的,转载过来吧,,感觉这里不错

最近在网上看了一个程序:

#include<stdio.h>

#include<stdlib.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

下面是我经过测试得到的一点点小结论,虚拟主机,供大家共勉。

只有当a[0]的值在计算机中存储的补码的最后一位是1时,此时经过strlen(a)得到的结论才不是0.当遇到a[i]==0时,就相当于到了’\0’。所以会是上面的结果。

char的取值范围是-128到127.

我想上面的代码大家就应该明白了吧。

在第256个值时(也即是a[255]),美国服务器,a[255]==0;再加之strlen计算的结果不包含’\0’,(sizeof是要计算’\0’的)。所以就是255咯。

由于发帖(%E4%B8%BA%E4%BB%80%E4%B9%88%E8%BF%94%E5%9B%9E%E7%BB%93%E6%9E%9C%E4%B8%BA0)提出这个问题后,有很多网友给出比较理论方面的回答。我也在此做点总结吧。

首先我们需要明白字符0是’0’,而数值0就是0,以及需要明白’\0’在计算机中时怎么存储的。字符数字‘0’的ascii值是48,所以存储的是10形式。而数值0就是00,‘\0’也是存储的00.

其次我们需要明白:

strlen是求字符串的长度,不同于sizeof,strlen总是以’\0’作为字符串的结束标志。

然而字符串结束符’\0’存在内存中的值是0x00,当用strlen求字符串长度时,读到内存中的0x00就当做是字符串结束符’\0’。

,香港服务器人的价值,在遭受诱-惑的一瞬间被决定

自己写在51博客上的,转载过来吧,,感觉这里不错

相关文章:

你感兴趣的文章:

标签云: