signed char a[1000];
int i;
for(i=0;i<1000;i++){
a[i] = -1 - i;
}
printf("%d",strlen(a));
关于这一道面试题,首先必须要了解strlen的原理
strlen会范围字符的长度,直到遇到'/0’才会退出
也就是说
我们需要找到'/0'(空字符)的位置
可以看到根据ascii码,这个字符出现在0的位置,由于a的类型是char,也就是说当a[i] = 0时就会出现这个空字符。
根据输出可以分析,a的取值会从-1一直到-128,然后由于signed char的数据范围,会从-128 -> 127 再逐次减少到0,这个时候将会触发strlen的截取,所以总长度也就是128+127 = 255的结果