`
wangleide414
  • 浏览: 592404 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

C 语言中的危险函数

 
阅读更多

 

最危险:

gets 使用 fgets(buf, size, stdin)。这几乎总是一个大问题!


很危险:

strcpy 改为使用 strncpy。

strcat 改为使用 strncat。

sprintf 改为使用 snprintf,或者使用精度说明符。

scanf 使用精度说明符,或自己进行解析。

sscanf 使用精度说明符,或自己进行解析。

fscanf 使用精度说明符,或自己进行解析。

vfscanf 使用精度说明符,或自己进行解析。

vsprintf 改为使用 vsnprintf,或者使用精度说明符。

vscanf 使用精度说明符,或自己进行解析。

vsscanf 使用精度说明符,或自己进行解析。

streadd 确保分配的目的地参数大小是源参数大小的四倍。

strecpy 确保分配的目的地参数大小是源参数大小的四倍。


很危险(或稍小,取决于实现):

realpath 分配缓冲区大小为 MAXPATHLEN。同样,手工检查参数以确保输入参数不超过 MAXPATHLEN。

syslog 在将字符串输入传递给该函数之前,将所有字符串输入截成合理的大小。

getopt 在将字符串输入传递给该函数之前,将所有字符串输入截成合理的大小。

getopt_long 在将字符串输入传递给该函数之前,将所有字符串输入截成合理的大小。

getpass 在将字符串输入传递给该函数之前,将所有字符串输入截成合理的大小。


危险:

strtrns 手工检查来查看目的地大小是否至少与源字符串相等。


中等危险:

getchar   如果在循环中使用该函数,确保检查缓冲区边界。

fgetc 如果在循环中使用该函数,确保检查缓冲区边界。

getc 如果在循环中使用该函数,确保检查缓冲区边界。

read 如果在循环中使用该函数,确保检查缓冲区边界。


低危险:

bcopy 确保缓冲区大小与它所说的一样大。

fgets 确保缓冲区大小与它所说的一样大。

memcpy 确保缓冲区大小与它所说的一样大。

snprintf 确保缓冲区大小与它所说的一样大。

strccpy 确保缓冲区大小与它所说的一样大。

strcadd 确保缓冲区大小与它所说的一样大。

strncpy 确保缓冲区大小与它所说的一样大。

vsnprintf 确保缓冲区大小与它所说的一样大。

分享到:
评论

相关推荐

    一些需要禁用的PHP危险函数(disable_functions)

    危险等级:中 passthru() 功能描述:允许执行一个外部程序并回显输出,类似于 exec()。 危险等级:高 exec() 功能描述:允许执行一个外部程序(如 UNIX Shell 或 CMD 命令等)。 危险等级...

    Go语言·云动力 高清

    《Go语言鄠动力》是Go语言程序设计入门书,介绍了Go语言的基础知识,包括静态类型、流程控制、函数、动态类型、面向对象、并发编程等内容,以及同其他C类语言相比,Go所具备的全新特性。同时,《Go语言鄠动力》还...

    C++复试和面试题汇总

    语言基础 1、简述 C++语言的特点 • C++在 C 语言的基础上引入了面向对象的机制,...C++有模板、函数重载等新概念,C 语言中是没有的; • C 语言和 C++的内存管理不太一样,C 中使用 malloc 和 free,C++中使用

    《你必须知道的495个C语言问题》

    C是一门简洁精妙的语言,掌握基本语法容易,真正能够自如运用,就不那么简单了。你难免会遇到各种各样的问题,有些可能让你百思不得其解,甚至翻遍图书馆,也找不到问题的答案。 《你必须知道的495个C语言问题》的...

    你必须知道的495个C语言问题

    1.9 如何生成“半全局变量”,就是那种只能被部分源文件中的部分函数访问的变量? 存储类型 1.10 同一个静态(static)函数或变量的所有声明都必需包含static存储类型吗? 1.11 extern在函数声明中是什么意思? ...

    Go语言 云动力[20M]

    《Go语言鄠动力》是Go语言程序设计入门书,介绍了Go语言的基础知识,包括静态类型、流程控制、函数、动态类型、面向对象、并发编程等内容,以及同其他C类语言相比,Go所具备的全新特性。同时,《Go语言鄠动力》还...

    C语言FAQ 常见问题列表

    o 7.3 那么, 在 C 语言中 ``指针和数组等价" 到底是什么意思 ? o 7.4 那么为什么作为函数形参的数组和指针申明可以互换呢 ? o 7.5 如果你不能给它赋值, 那么数组如何能成为左值呢 ? o 7.6 现实地讲, 数组和...

    你必须知道的495个C语言问题(PDF)

    2.4 在C 语言中实现抽象数据类型什么方法最好? . . . . . . . . . . . 7 2.5 在C 中是否有模拟继承等面向对象程序设计特性的好方法? . . . 7 i 目录ii 2.6 我遇到这样声明结构的代码: struct name f int namelen; ...

    语言程序设计课后习题答案

    在C++中,有两种给出注释的方法:一种是延用C语言方法,使用"/*"和"*/"括起注释文字。另一种方法是使用"//",从"//"开始,直到它所在行的行尾,所有字符都被作为注释处理。 2-8 什么叫做表达式?x = 5 + 7是一个...

    现代C++程序设计

    8.4.3 在重载的构造函数中使用参数 8.4.4 基类和派生类的析构函数 8.4.5 医生也是人 8.4.6 关于派生类和基类构造函数的规则 8.5 多态和虚函数 8.5.1 多态——同一个接口,不同的行为 8.5.2 什么是虚函数 8.5.3 虚...

    【全新正版】现代C++程序设计(原书第2版)

    8.4.3 在重载的构造函数中使用参数 8.4.4 基类和派生类的析构函数 8.4.5 医生也是人 8.4.6 关于派生类和基类构造函数的规则 8.5 多态和虚函数 8.5.1 多态——同一个接口,不同的行为 8.5.2 什么是虚函数 8.5.3 虚...

    最新名企标准通用C++面试题,

    Test函数中的 str一直都是 NULL。 strcpy(str, "hello world");将使程序崩溃。 char *GetMemory(void) { char p[] = "hello world"; return p; } void Test(void) { char *str = NULL; str = GetMemory(); ...

    C++中ZeroMemory、memset危险需慎用

    是由C Run-time Library提供的提供的函数,作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种快方法。由于是语言层面提供,所以可跨平台使用。参考:http://

Global site tag (gtag.js) - Google Analytics