#include <stdio.h> #include <string.h> int main() { char aa[10]; printf("%d",strlen(aa)); return 0; }
題目的標題是: char a[10],strlen(a)爲什麼等於 15?
很明顯這裏沒有初始化,所取得的值不唯一,應該是隨機數,我原本也是這麼想。
但是在VC下運行的結果是15,在其他編譯運行的結果卻是其他的數字7。
又轉到在線編譯器 裏進行編譯得出來的結果是2
但是爲什麼在VC裏面恆爲15呢?
首先根據4字節對齊,char a[10];申請了12個字節的空間。在VC6.0的調試環境下,a[10] 每個數組元素被賦值爲CC,a[10]上面爲EBP的值,EBP值爲Ox0012FFC0,由於X86符合小端存貯,所以又多加了3個字節,故一定爲15個字節。
棧中ebp的值Ox0012FFC0,實際在內存佈局(INTEL CPU)是
0xc0 0xff 0x12 0x00
低---------------高
即多3個字節才遇到'\0'
char a[10];
strlen(a);
字符數組a未初始化,或賦值,對其用strlen庫函數計算字符串長度,返回值是不確定的,因爲strlen函數實際上就是從地址a開始計算字符格式,一直遇到'\0'爲止。
另外注意的是,如果此處用sizeof() 的話值就不一樣了。因爲sizeof()不需要初始化,而strlen是需要初始化的,