C语言安全编码之数值中的sizeof操作符

2025-05-27 0 92

通常来说获取数组的长度时不要对指针应用sizeof操作符

现来看看下面这段代码:

?

1

2

3

4

5

6

7

8

9

10
void clear(int array[]) {

for(size_t i = 0; i < sizeof(array) / sizeof(array[0]); i++) {

array[i] = 0;

}

}

void dowork(void) {

int dis[12];

clear(dis);

/*...*/

}

clear()使用sizeof(array) / sizeof(array[0])这种用法确定这个数组的元素数量,但由于array是一个形参,因此它是指针类型,sizeof(array) = sizeof(int *) = 4 (32位OS)

sizeof操作符应用于声明为数组或函数类型的形参时,它会产生经过调整的(指针)类型的长度

对此问题的解决方案如下:

?

1

2

3

4

5

6

7

8

9

10
void clear(int array[], size_t len) {

for(size_t i = 0; i < len; i++) {

array[i] = 0;

}

}

void dowork(void) {

int dis[12];

clear(dis, sizeof(dis) / sizeof(dis[0]));

/*...*/

}

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 C语言安全编码之数值中的sizeof操作符 https://www.kuaiidc.com/76024.html

相关文章

发表评论
暂无评论