对于strlen()函数的一点小疑问

看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开发

其实,每一个这种函数,对未初始化的数组作操做,都存在这种风险,这是咱们开发过程当中须要重点留意的。字符串

相关文章
相关标签/搜索