#include <stdio.h>
#include <string.h>
int main()
{
char a[1000];
for (int i = 0; i < 1000; i++) {
a[i] = -1 - i;
}
printf("%d\n", strlen(a));
return 0;
}
char类型是有符号的,范围为-128到127。
随着程序循环的进行,a[ i ]依次被赋值 -1,-2,-3,……-128,
根据C语言的规范,溢出后的结果是未定义的,这意味着编译器可以根据具体实现来决定溢出后的结果。在大多数情况下,溢出后的结果会回绕到类型的最大值,也就是127。所以,通常情况下,-128减去1后的值会变为127。
a[ i ]= -1 - i 小于-128时被赋值为127,126,……3,2,1,0。以此往复循环一千次(如下图)。当strlen读取到第一个“ 0 “结束(\0的ASCll值为0),所以一共为128+127=255个,输出结果为255