最危险:
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 确保缓冲区大小与它所说的一样大。
分享到:
相关推荐
"可重入函数c语言" 可重入函数是指可以由多于一个任务并发使用,而不必担心数据错误的函数。相反,不可重入函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)...
Stroustrup 在设计 C++语言时充分考虑了这个问题并很好地予以解决:把对象的初始化工作放在构造函数中,把清除工作放在析构函数中。当对象被创建时,构造函数被自动执行。当对象消亡时,析构函数被自动执行。这下就...
危险等级:中 passthru() 功能描述:允许执行一个外部程序并回显输出,类似于 exec()。 危险等级:高 exec() 功能描述:允许执行一个外部程序(如 UNIX Shell 或 CMD 命令等)。 危险等级...
- **《C程序设计》(王爽著)**:这本书深入浅出地介绍了C语言的基础知识和高级特性,是学习C语言的经典教材之一。 通过以上介绍,我们可以看出C语言不仅在计算机科学领域具有重要的地位,而且也是学习编程的一个...
【Java语言学校的危险性】 这篇文章由Joel Spolsky撰写,主要讨论了Java作为教学语言在编程教育中的潜在问题。作者指出,随着Java在大学教育中的普及,它可能降低了编程学习的门槛,使得一些学生得以轻松通过编程...
这份手册详细介绍了PCOMM32 PRO通信驱动集,帮助开发者理解和使用C或C++语言来实现与PMAC设备的交互。 PCOMM32 PRO 是一套通信驱动程序集,它提供了丰富的函数库,使得开发者能够高效地控制PMAC运动控制器。这些...
C语言的特点是代码量小、速度快、功能强大,但也存在一些缺点,如危险性高、开发周期长、可移植性不强。 二、C语言的应用领域 C语言的应用领域非常广泛,包括操作系统、嵌入式系统、网络编程、数据库、云计算、...
6. **内存管理**:C语言允许程序员直接申请和释放内存(malloc, free),这使得C语言既灵活又危险,因为错误的内存管理可能导致内存泄漏或段错误。 7. **位操作**:C语言提供了位运算符,如位与(&)、位或(|)、位...
在C语言和C++语言中,指针是用来直接访问内存的一种方式。指针在使用不当的情况下非常容易出现问题,尤其是内存越界、野指针(未初始化或者已经释放的指针)、空指针访问等,都会造成程序的运行时错误,甚至导致程序...
在printf或scanf等函数中使用错误的格式字符串会导致问题,比如"format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘char *’"。 10. **函数调用错误(Incorrect Function Calls)**:...
在学习C语言的过程中,掌握其基础知识至关重要,因为C语言是许多现代编程语言的基础,理解和熟练运用C语言能够帮助我们更好地理解计算机底层工作原理,提升编程技能。 C语言是一种结构化编程语言,它的特点包括: ...
在C++编程语言中,`strcpy`函数是一个用于字符串复制的标准库函数,它属于`<cstring>`头文件的一部分。函数的基本用法是将一个字符串完全复制到另一个预先分配好的内存空间中。下面是关于`strcpy`函数的详细讲解: ...
《Go语言鄠动力》是Go语言程序设计入门书,介绍了Go语言的基础知识,包括静态类型、流程控制、函数、动态类型、面向对象、并发编程等内容,以及同其他C类语言相比,Go所具备的全新特性。同时,《Go语言鄠动力》还...
- **与其他编程语言交互**:例如,当需要调用C语言中的函数时。 - **编写底层抽象**:对于某些标准库尚未提供的功能,可以通过不安全代码来实现。 - **使用非所有权语义的类型**:在某些情况下,类型系统的所有权...
在C语言的发展历史中,1978年由美国电话电报公司贝尔实验室正式发表的版本,以及1989年被批准的ANSI C标准(ANSI X3.159-1989),标志着C语言从单一平台走向标准化。随后ISO的介入进一步推动了C语言的国际标准化进程...
它是由 B 语言发展而来的,具有代码量小、速度快、功能强大的特点,但同时也存在着危险性高、开发周期长、可移植性不强的缺点。C 语言的应用领域主要在系统领域,例如操作系统、嵌入式系统、数据库等。 二、怎样...
在这个项目中,开发者设计了一个程序,用户需要编写C语言代码来控制角色在矿井中寻找出口,避开危险,最终成功逃生。这种方式将理论学习与实践操作相结合,极大地提高了学习者的兴趣和参与度。 首先,我们需要了解...
// 使用危险的gets函数 strcpy(buffer, input); return 0; } ``` 在这个例子中,使用`gets`函数读取用户输入,这可能导致缓冲区溢出。 以上列举了一些C语言中常见的bug及其实例。在实际开发过程中,应特别注意...