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