看csapp时候,看一下char*[8],觉得char*也是一字节,可是指针是地址,64位编译器下是8字节,因此sizeof(B)是64字节数组
后来又看strlen()。app
1 #include"stdio.h" 2 #include"string.h" 3 int main(void){ 4 char B[8];5 printf("%d",strlen(B)); 6 7 return 0; 8 }
运行后,发现结果,有点蹊跷,有时候是0,有时候是6。函数
strlen在计算数组长度的时候是遇到‘\0’时计算就中止。spa
若是不在字符数组后面加上‘\0’,那么strlen就会一直计算下去,直到遇到内存中的'\0',才中止计算。指针
能够看到在内存的某处存在‘\0’,因为strlen会遇到‘\0’时才中止计算长度,因此算出来的长度并非字符数组的真实长度,并且这个值是随机的。code
这就告诉咱们:blog
1.对数组使用strlen()时,要确保数组中有\0结束符内存
2.联想到strncpy等操做,若是按strlen后的长度复制字符串,要记得在结尾加个\0开发
其实,每一个这种函数,对未初始化的数组作操做,都存在这种风险,这是咱们开发过程当中须要重点留意的。字符串