C语言安全编码之数值中的sizeof操作符
通常来说获取数组的长度时不要对指针应用sizeof操作符。
现来看看下面这段代码:
voidclear(intarray[]){
for(size_ti=0;i<sizeof(array)/sizeof(array[0]);i++){
array[i]=0;
}
}
voiddowork(void){
intdis[12];
clear(dis);
/*...*/
}
clear()使用sizeof(array)/sizeof(array[0])这种用法确定这个数组的元素数量,但由于array是一个形参,因此它是指针类型,sizeof(array)=sizeof(int*)=4 (32位OS)
当sizeof操作符应用于声明为数组或函数类型的形参时,它会产生经过调整的(指针)类型的长度
对此问题的解决方案如下:
voidclear(intarray[],size_tlen){
for(size_ti=0;i<len;i++){
array[i]=0;
}
}
voiddowork(void){
intdis[12];
clear(dis,sizeof(dis)/sizeof(dis[0]));
/*...*/
}
热门推荐
10 祝孙辈生日祝福语简短
11 恋人跨年祝福语大全简短
12 考大学敬酒简短祝福语
13 开工投产大吉祝福语 简短
14 偶然结婚祝福语朋友简短
15 感谢学长学姐祝福语简短
16 戏精的祝福语简短
17 我要结婚祝福语简短
18 婚前女儿生日祝福语简短