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

 更新时间:2014年07月07日 12:05:43   投稿:shichen2014  
这篇文章主要介绍了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++中的多态与文件操作

    浅析C++中的多态与文件操作

    多态是面向对象编程(OOP)的核心概念之一,它允许对象在相同操作下表现出不同的行为,本文主要为大家介绍了C++中多态与文件操作的相关知识,希望对大家有所帮助
    2024-04-04
  • C语言实现找出二叉树中某个值的所有路径的方法

    C语言实现找出二叉树中某个值的所有路径的方法

    这篇文章主要介绍了C语言实现找出二叉树中某个值的所有路径的方法,针对数据结构中二叉树的实用操作技巧,需要的朋友可以参考下
    2014-09-09
  • VC取得任务栏高度的方法

    VC取得任务栏高度的方法

    这篇文章主要介绍了VC取得任务栏高度的方法,需要的朋友可以参考下
    2014-07-07
  • 使用C语言实现12种排序方法

    使用C语言实现12种排序方法

    这篇文章主要介绍了用C语言完整实现12种排序方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • C/C++实现捕获所有信号的示例详解

    C/C++实现捕获所有信号的示例详解

    Linux的信号机制大部分情况下用不到,但是由于大部分信号的默认处理是终止进程,不正确处理会惹麻烦,所以我们来看看如何使用C/C++实现捕获所有信号吧
    2024-03-03
  • C语言详解热门考点结构体内存对齐

    C语言详解热门考点结构体内存对齐

    C 数组允许定义可存储相同类型数据项的变量,结构是 C 编程中另一种用户自定义的可用的数据类型,它允许你存储不同类型的数据项,本篇让我们来了解C 的结构体内存对齐
    2022-04-04
  • C语言的数据结构之树、森连、二叉树之间的转换图解

    C语言的数据结构之树、森连、二叉树之间的转换图解

    这篇文章主要介绍了C语言的数据结构之树、森连、二叉树之间的转换详解,数据是信息的载体,是描述客观事物属性的数、字符以及所有能输入到计算机中并被程序识别和处理的符号的集合,需要的朋友可以参考下
    2023-07-07
  • vscode和cmake编译多个C++文件的实现方法

    vscode和cmake编译多个C++文件的实现方法

    这篇文章主要介绍了vscode和cmake编译多个C++文件的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • C语言完全平方整数的判断

    C语言完全平方整数的判断

    大家好,本篇文章主要讲的是C语言完全平方整数的判断,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • C++四种case的详细介绍小结

    C++四种case的详细介绍小结

    本文主要介绍了C++四种case的详细介绍小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05

最新评论