看csapp時候,看一下char*[8],以為char*也是一位元組,但是指標是地址,64位編譯器下是8位元組,所以sizeof(B)是64位元組
后來又看strlen(),
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’時計算就停止,
如果不在字符陣列后面加上‘\0’,那么strlen就會一直計算下去,直到遇到記憶體中的'\0',才停止計算,
可以看到在記憶體的某處存在‘\0’,由于strlen會遇到‘\0’時才停止計算長度,所以算出來的長度并不是字符陣列的真實長度,而且這個值是隨機的,
這就告訴我們:
1.對陣列使用strlen()時,要確保陣列中有\0結束符
2.聯想到strncpy等操作,如果按strlen后的長度復制字串,要記得在結尾加個\0
其實,每個這種函式,對未初始化的陣列做操作,都存在這種風險,這是我們開發程序中需要重點留意的,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/51119.html
標籤:C
上一篇:C語言位元組對齊
下一篇:C/C++
