代码如下:
---------------------------------
#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了