記一道有意思的題目

#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是需要初始化的,

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章