對於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開發

其實,每一個這種函數,對未初始化的數組作操做,都存在這種風險,這是咱們開發過程當中須要重點留意的。字符串

相關文章
相關標籤/搜索