最危险:
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 确保缓冲区大小与它所说的一样大。
分享到:
相关推荐
本程序我起名叫做《危险地篮球》,是描绘一个小人在打篮球的时候,做扣篮、投球等一些动作时,有可能发生的危险。 1、首先由函数检测显示器后自动选择图形驱动器进行图形模式的初始化,增加了程序的可移植性。 2、...
《你必须知道的495个C语言问题》以问答的形式组织内容,讨论了学习或使用C语言的过程中经常遇到的一些问题。书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预...
可我找不到任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数……,如此往复,以至无穷。 数组大小 1.23 能否声明和传入数组大小一致的局部数组,或者由其他参数...
难道在C语言中一个结构不能包含指向自己的指针吗? o 2.7 怎样建立和理解非常复杂的声明?例如定义一个包含 N 个指向返回指向字符的指针的函数的指针的数组? o 2.8 函数只定义了一次, 调用了一次, 但编译器提示...
难道在C语言中一个结构不能包含指向自己的指针吗? . . . . 3 1.7 怎样建立和理解非常复杂的声明?例如定义一个包含N 个指向返 回指向字符的指针的函数的指针的数组? . . . . . . . . . . . . . . 3 1.8 函数只定义...
不过,当航班线路变得丰富之后,人们也发现很多时候选择直达航班往往并非最省钱的路径,比如飞往美国选择从韩国转机就比直飞要便宜多了(虽然这样有坠机的危险)。这样一来,当采用曲线行进能达到省钱也省时间的目的...
1.1 什么是C语言和C++ 1.1.1 C和C++历史回顾 1.1.2 C/C++是一门编译语言 1.1.3 为什么许多程序员都选择C++ 1.2 什么是面向对象 1.2.1 C++程序并不一定是面向对象的 1.2.2 一个简单的面向对象程序示例 1.2.3 面向...
这本包含最新资料的完整书籍,反映出被ANSI/ISO C++语言标准规格书纳入的C++...每一个元素都有深刻的呈现,包括其介绍、设计、运用实例、细部解说、陷阱、意想不到的危险,以及相关类别和函数的精确樯记式和定义式。
答:C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。假设某个函数的原型为: void foo(int x, int y); 该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_...
1.1 什么是C语言和C++ 1.1.1 C和C++历史回顾 1.1.2 C/C++是一门编译语言 1.1.3 为什么许多程序员都选择C++ 1.2 什么是面向对象 1.2.1 C++程序并不一定是面向对象的 1.2.2 一个简单的面向对象程序示例 1.2.3 面向对象...
107.危险的组合 108.文件比较 109.文章统计 110.五猴分桃 111.小型数据库 112.幸运儿 113.幸运数字”7“ 114.选择排序 115.寻找规律 116.循环移位 117.延伸的卡片 118.羊羊聚会 119.一维数组”赋值“ 120.一维数组”...
动态ffi 通过clang从C标头中收集顶级声明语法树数据。 该模块当前仅适用于GNU / Linux和macOS。... 最后: 将未经处理的用户输入传递给该库中的任何函数都是非常危险的。 在任何情况下都不应该这样做
第一天红军发了条信息要蓝军第二天一起进攻,蓝军收到之后,发一条确认信息,但是蓝军担心的是‘确认信息’如果也不可靠而没有成功到达红军那里,那自己不是很危险?于是红军再发一条‘对确认的确认信息’,但同样的...
C 语言有一些不安全的语言特性,比如指针使用的潜在危险、强制类型 转换的不确定性、内存泄漏等。而 C++增加了不少新特性来改善安全 性,例如引用、智能指针等。 • C++有模板、函数重载等新概念,C 语言中是...