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]));
/*...*/
}
热门推荐
1 训练狗狗憋尿
2 狗狗追踪训练
3 狗狗训练要多少钱
5 深圳狗狗训练
6 训练狗狗唤回
7 狗狗叫怎么训练
8 狗狗训练班
10 狗狗社会化训练
11 狗狗叫回训练
12 广州狗狗训练学校
13 狗狗训练躺下
14 狗狗随行训练
15 训练狗狗巡回
16 狗狗要怎么训练
17 狗狗喂食训练
18 训练狗狗躺下