最危险:
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 确保缓冲区大小与它所说的一样大。
分享到:
相关推荐
危险等级:中 passthru() 功能描述:允许执行一个外部程序并回显输出,类似于 exec()。 危险等级:高 exec() 功能描述:允许执行一个外部程序(如 UNIX Shell 或 CMD 命令等)。 危险等级...
《Go语言鄠动力》是Go语言程序设计入门书,介绍了Go语言的基础知识,包括静态类型、流程控制、函数、动态类型、面向对象、并发编程等内容,以及同其他C类语言相比,Go所具备的全新特性。同时,《Go语言鄠动力》还...
语言基础 1、简述 C++语言的特点 • C++在 C 语言的基础上引入了面向对象的机制,...C++有模板、函数重载等新概念,C 语言中是没有的; • C 语言和 C++的内存管理不太一样,C 中使用 malloc 和 free,C++中使用
C是一门简洁精妙的语言,掌握基本语法容易,真正能够自如运用,就不那么简单了。你难免会遇到各种各样的问题,有些可能让你百思不得其解,甚至翻遍图书馆,也找不到问题的答案。 《你必须知道的495个C语言问题》的...
1.9 如何生成“半全局变量”,就是那种只能被部分源文件中的部分函数访问的变量? 存储类型 1.10 同一个静态(static)函数或变量的所有声明都必需包含static存储类型吗? 1.11 extern在函数声明中是什么意思? ...
《Go语言鄠动力》是Go语言程序设计入门书,介绍了Go语言的基础知识,包括静态类型、流程控制、函数、动态类型、面向对象、并发编程等内容,以及同其他C类语言相比,Go所具备的全新特性。同时,《Go语言鄠动力》还...
o 7.3 那么, 在 C 语言中 ``指针和数组等价" 到底是什么意思 ? o 7.4 那么为什么作为函数形参的数组和指针申明可以互换呢 ? o 7.5 如果你不能给它赋值, 那么数组如何能成为左值呢 ? o 7.6 现实地讲, 数组和...
2.4 在C 语言中实现抽象数据类型什么方法最好? . . . . . . . . . . . 7 2.5 在C 中是否有模拟继承等面向对象程序设计特性的好方法? . . . 7 i 目录ii 2.6 我遇到这样声明结构的代码: struct name f int namelen; ...
在C++中,有两种给出注释的方法:一种是延用C语言方法,使用"/*"和"*/"括起注释文字。另一种方法是使用"//",从"//"开始,直到它所在行的行尾,所有字符都被作为注释处理。 2-8 什么叫做表达式?x = 5 + 7是一个...
8.4.3 在重载的构造函数中使用参数 8.4.4 基类和派生类的析构函数 8.4.5 医生也是人 8.4.6 关于派生类和基类构造函数的规则 8.5 多态和虚函数 8.5.1 多态——同一个接口,不同的行为 8.5.2 什么是虚函数 8.5.3 虚...
8.4.3 在重载的构造函数中使用参数 8.4.4 基类和派生类的析构函数 8.4.5 医生也是人 8.4.6 关于派生类和基类构造函数的规则 8.5 多态和虚函数 8.5.1 多态——同一个接口,不同的行为 8.5.2 什么是虚函数 8.5.3 虚...
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 Run-time Library提供的提供的函数,作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种快方法。由于是语言层面提供,所以可跨平台使用。参考:http://