代码如下:

---------------------------------

#include<stdio.h>

#include <string.h>

#include <stdlib.h>

int main()

{

                 char a[1000];

                 int i = 0;

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

                {

                                a[i] = -1 - i;

                                printf( "a%d =%d\n",i,a[i]);

                }

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


                printf( "\n");

                printf( "size = %d\n", sizeof (a) / sizeof(a[0]));

                 return 0;

}

------------------------------------------

程序执行的结果: 

a0 = -1  a1 = -2··········· 一直到a127 = -128  然后a128 = 127  a129 = 126  一直到a255 = 0,

然后a156 = -1开始,重复之前的循环。

而strlen(a) =255

size = 1000。


为什么会这样呢?下面是解释:

 1、首先,定义的a是一个字符串数组,范围是-128~127  这段范围的长度是255.


 2、然后,再看,从a0 = -1开始,一直到a255 = 0 这段,


 3、字符串存入的是数字,而这个数字在字符串数组的元素中,是作为ASCALL码的。

      也就是说,每个存入 字符串数组元素 中的数字,都对应着一个字符

      比如说:用%d的格式输出,就是存入的那个数字,而如果用%c输出,则打印出的就是那个字符了。


 4、而’\0'的ASCALL码值就是0,strlen函数在计算字符串的长度时,遇到‘\0’停止,统计它前面的字符个数

       也就是说,当使用strlen函数 走到a255时,发现它对应的元素是‘\0’了,这时候,开始统计从a0到a254(不算a255)

       之间的元素数目,统计出来是255,所以strlen(a)得到的就是255了