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