strlen(一个没有初始化的字符数组)

#include<stdio.h>
#include<string.h>
int main(void){ char aa[10]; printf("%d",strlen(aa)); return 0;}

因为你没有对数组进行初始化啊,所以数组中每一项是一个随机值,编译器会在数组末尾往后第n个地址的值初始化为\0,n的值看编译器而定,所以,如果你定义aa[1],在vc6上,会在a[0]后的第七个字节变成\0,如果是10,那就是a[9]后面第五个,所以你输出会是15,我想这个也是为了预防内存的非法访问而做的编译器优化吧

你参考下我写的测试代码就知道了
#include <stdio.h>
int main(void)
{        int n=8;
 char aa[2];
 for(int i=0;i<n;i++)
    printf("%d\n",aa[i]);
 return 0;
} //aa数组的长度越大,n也就把它设得越大

不同的编译器也可能导致n的值不一样

阿朗的一道笔试题

void main() 

int i; 
//characNew[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; 
//strlen(acNew)输出结果10 
char acNew[20]; 
//strlen(acNew)输出结果是29 
for(i=0;i<10;i++) 

acNew='0'; 

printf("%d\n",strlen(acNew)); 
return ; 

6、void PrintBlue() 

charpcBlue[]={'b','l','u','e'}; 
printf("%s",pcBlue); 
return 0; 
}正确的是
A、pcBlue数组初始化时没有字符串结束符
B、数组pcBlue定义时必须指定长度

strlen是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值