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

C语言安全编码数组记法的一致性

公孙芷阳
2023-03-14
本文向大家介绍C语言安全编码数组记法的一致性,包括了C语言安全编码数组记法的一致性的使用技巧和注意事项,需要的朋友参考一下

对C语言程序来说,在同一文件中时,void func(char *a);  和  void func(char a[]); 完全等价

但在函数原型之外,如果一个数组在一个文件中声明为指针,在另一个不同的文件中声明为数组,那么它们是不等价的

示例代码如下:

//main.c
#include<stdlib.h>
enum {ARRAYSIZE = 100};
char *a;
void insert_a(void);
int main(void) {
  a = (char*)malloc(ARRAYSIZE);
  if(a == NULL) {
    //处理分配错误
  }
  insert_a();
  return 0;
}
//insert_a.c
char a[];
void insert_a(void) {
  a[0] = 'a';
}

解决方案如下:

//insert_a.h
enum {ARRAYSIZE = 100};
extern char *a;
void insert_a(void);
//insert_a.c
#include "insert_a.h"
char *a;
void insert_a(void) {
  a[0] = 'a';
}
//main.c
#include<stdlib.h>
#include"insert_a.h"
int main(void){
  a = (char*)malloc(ARRAYSIZE);
  if(a == NULL) {
    //处理分配错误
  }
  insert_a();
  return 0;
}
 类似资料:
  • 本文向大家介绍C语言安全编码之数组索引位的合法范围,包括了C语言安全编码之数组索引位的合法范围的使用技巧和注意事项,需要的朋友参考一下 C语言中的数组索引必须保证位于合法的范围内! 示例代码如下: 其中:pos为int类型,可能为负数,这会导致在数组所引用的内存边界之外进行写入 解决方案如下:

  • 本文向大家介绍C语言安全编码之数值中的sizeof操作符,包括了C语言安全编码之数值中的sizeof操作符的使用技巧和注意事项,需要的朋友参考一下 通常来说获取数组的长度时不要对指针应用sizeof操作符。 现来看看下面这段代码: clear()使用sizeof(array) / sizeof(array[0])这种用法确定这个数组的元素数量,但由于array是一个形参,因此它是指针类型,size

  • 数组是一种内存分配的形式,数组是定义了一个连续的空间,与指针类似。 数组定义方式 类型 数组名[数组大小];//类型为每个空间的大小,我们通过数组名和下标访问数据,数组名指向存储数据的首地址,但是我们不可以改变数组名指向的地址。数组大小只有在定义的时候生效,定义之后不可以被改变。 int a[100]; //申请了一个名叫a的数组,它包含了100个整型。 数组的访问 我们可以通过数组的下标访问数

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

  • 数组是编程语言中用来存储元素的集合。在 C 语言中,集合是储存相同类型元素的集合。并且可以通过一个名称来来访。 -------------------------------------------- | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | …… | N-1 | -------------------------------------------- 第一个元素

  • 本文向大家介绍C语言安全之数组长度与指针实例解析,包括了C语言安全之数组长度与指针实例解析的使用技巧和注意事项,需要的朋友参考一下 1.C语言编码需要保证变长数组的长度参数位于合法范围之内 例如以下代码: 解决方案如下: 2.需要保证复制的目标具有足够的存储空间 参考代码如下所示: 3.不要把一个指向非数组对象的指针加上或减去一个整数 错误代码如下所示: 上面的代码试图用指针运算访问结构的元素,这