C语言安全编码之数值中的sizeof操作符
2014-07-07 12:05
1476 查看
通常来说获取数组的长度时不要对指针应用sizeof操作符。
现来看看下面这段代码:
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操作符应用于声明为数组或函数类型的形参时,它会产生经过调整的(指针)类型的长度
对此问题的解决方案如下:
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])); /*...*/ }
您可能感兴趣的文章:
相关文章推荐
- 一道C语言安全编码题目
- C语言中的sizeof操作符用法及和strlen的区别
- C语言中 sizeof 操作符使用时的一些细节 和 指针类型的大小
- C语言strlen函数和sizeof操作符
- C语言:数据类型、存储区字节数、占位符、sizeof、输入输出、二进制相关、操作符(++,--)、主函数参数
- 7_21|C语言|操作符注意事项|sizeof使用讲解|结构体简单介绍
- C语言之sizeof操作符
- c语言:sizeof的使用,其不是函数,是一个操作符关键字,定义一个数组arr,输出arr和&arr的区别
- 一道C语言安全编码题目
- c语言安全编码建议一
- c语言:sizeof的使用,其不是函数,是一个操作符关键字,定义一个数组arr,输出arr和&arr的区别
- C语言安全编码之数组索引位的合法范围
- C语言的编码风格-函数说明(6)
- 一句话经验:sizeof是操作符而不是函数
- 解析C语言中的sizeof
- C语言的编码风格-文件描述(1)
- C语言的操作符(14)
- 关于sizeof操作符的理解和总结
- C语言的编码风格-缩进(5)
- 安全的 ADO.NET 编码指南