当前位置: 首页 > 编程笔记 >

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

韩经武
2023-03-14
本文向大家介绍C语言安全编码之数值中的sizeof操作符,包括了C语言安全编码之数值中的sizeof操作符的使用技巧和注意事项,需要的朋友参考一下

通常来说获取数组的长度时不要对指针应用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语言new操作的安全性分析,包括了C语言new操作的安全性分析的使用技巧和注意事项,需要的朋友参考一下 对于学习过C语言的朋友应该都知道,使用 malloc/calloc 等分配内存的函数时,一定要检查其返回值是否为“空指针”(亦即检查分配内存的操作是否成功),这是良好的编程习惯,也是编写可靠程序所必需的。但是,如果你简单地把这一招应用到new上,那可就不一定正确了。我经常看到类似

  • 本文向大家介绍C语言安全编码之数组索引位的合法范围,包括了C语言安全编码之数组索引位的合法范围的使用技巧和注意事项,需要的朋友参考一下 C语言中的数组索引必须保证位于合法的范围内! 示例代码如下: 其中:pos为int类型,可能为负数,这会导致在数组所引用的内存边界之外进行写入 解决方案如下:

  • 本文向大家介绍C语言中的sizeof操作符用法及和strlen的区别,包括了C语言中的sizeof操作符用法及和strlen的区别的使用技巧和注意事项,需要的朋友参考一下 一、 定义:   sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。其返回值类型为size_t,在头文件stddef.h中定义。在32位系统中: char的siz

  • 本文向大家介绍C语言安全编码数组记法的一致性,包括了C语言安全编码数组记法的一致性的使用技巧和注意事项,需要的朋友参考一下 对C语言程序来说,在同一文件中时,void func(char *a);  和  void func(char a[]); 完全等价 但在函数原型之外,如果一个数组在一个文件中声明为指针,在另一个不同的文件中声明为数组,那么它们是不等价的 示例代码如下: 解决方案如下:

  • 本文向大家介绍java安全编码指南之:Number操作详解,包括了java安全编码指南之:Number操作详解的使用技巧和注意事项,需要的朋友参考一下 简介 java中可以被称为Number的有byte,short,int,long,float,double和char,我们在使用这些Nubmer的过程中,需要注意些什么内容呢?一起来看看吧。 Number的范围 每种Number类型都有它的范围,我

  • 本文向大家介绍C语言中操作密码文件的一些函数总结,包括了C语言中操作密码文件的一些函数总结的使用技巧和注意事项,需要的朋友参考一下 C语言setpwent()函数:从头读取密码文件中的账号数据 头文件: 定义函数: 函数说明:setpwent()用来将getpwent()的读写地址指回密码文件开头。 范例 执行结果: C语言getpwent()函数:从密码文件中取得账号的数据 头文件: 定义函数: