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

 更新时间:2014年07月07日 14:36:37   投稿:shichen2014  
这篇文章主要介绍了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;
}

相关文章

  • SublimeText编译C开发环境设置

    SublimeText编译C开发环境设置

    这篇文章主要介绍了使用SublimeText编译C代码的开发环境设置,大家参考使用
    2013-11-11
  • NDK 数据结构之队列与栈等的实现

    NDK 数据结构之队列与栈等的实现

    这篇文章主要介绍了NDK 数据结构之队列与栈等的实现的相关资料,希望通过本文大家能理解掌握这部分内容,需要的朋友可以参考下
    2017-10-10
  • C++中的伪随机数

    C++中的伪随机数

    这篇文章主要介绍了C++中的伪随机数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • c++判断是否为目录的示例分享

    c++判断是否为目录的示例分享

    这篇文章主要介绍了c++判断是否为目录的示例,需要的朋友可以参考下
    2014-03-03
  • C语言高级教程之变长数组详解

    C语言高级教程之变长数组详解

    这篇文章主要介绍了C语言中变长数组的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • C++调用C函数报错无法解析的外部命令/无法解析的外部符号问题

    C++调用C函数报错无法解析的外部命令/无法解析的外部符号问题

    这篇文章主要介绍了C++调用C函数报错无法解析的外部命令/无法解析的外部符号问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 适合初学者的C语言常量类型的讲解

    适合初学者的C语言常量类型的讲解

    常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。常量就像是常规的变量,只不过常量的值在定义后不能进行修改
    2022-04-04
  • C语言中回调函数的含义与使用场景详解

    C语言中回调函数的含义与使用场景详解

    这篇文章主要为大家详细介绍了C语言中回调函数的含义与使用场景,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • C++ 单例模式的几种实现方式研究

    C++ 单例模式的几种实现方式研究

    单例模式,可以说设计模式中最常应用的一种模式了,据说也是面试官最喜欢的题目。但是如果没有学过设计模式的人,可能不会想到要去应用单例模式,面对单例模式适用的情况
    2019-01-01
  • 浅析c++函数参数和返回值

    浅析c++函数参数和返回值

    c++一直以来是一个关注效率的代码,这样关于函数的参数传递和返回值的接收,是重中之重,这篇文章主要介绍了c++函数参数和返回值,需要的朋友可以参考下
    2023-05-05

最新评论