最危险:
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语言" 可重入函数是指可以由多于一个任务并发使用,而不必担心数据错误的函数。相反,不可重入函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)...
在C语言中,字符串处理是极其常见的需求,因此编译器通常会提供一系列处理字符串的函数以供开发者使用。这些函数广泛应用于各种场合,包括但不限于字符串的输入输出、连接、复制、比较和长度计算等。以下是一些基本...
C语言的特点是代码量小、速度快、功能强大,但也存在一些缺点,如危险性高、开发周期长、可移植性不强。 二、C语言的应用领域 C语言的应用领域非常广泛,包括操作系统、嵌入式系统、网络编程、数据库、云计算、...
6. **内存管理**:C语言允许程序员直接申请和释放内存(malloc, free),这使得C语言既灵活又危险,因为错误的内存管理可能导致内存泄漏或段错误。 7. **位操作**:C语言提供了位运算符,如位与(&)、位或(|)、位...
3. **直接操作内存**:C语言允许程序员直接访问和操作内存,提供了指针类型,这是其强大但也有一定危险性的特性。 4. **移植性好**:由于C语言的编译器可针对多种不同的硬件平台编写,因此C语言程序具有良好的可...
在C语言编程中,指针的使用是一种非常强大但也非常危险的功能。指针之所以强大,是因为它能够直接操作内存地址,从而可以有效地访问、修改和分配内存。然而,如果使用不当,未初始化的指针极容易导致程序崩溃。在...
总结一下,`strcat`函数是C语言中用于拼接字符串的实用工具,其基本用法是将源字符串的副本添加到目标字符串的末尾。然而,使用时务必注意内存管理,确保目标字符串有足够的空间容纳源字符串,并避免可能出现的字符...
C语言是一种广泛使用的编程语言,它的特点是代码量小、速度快、功能强大,但也存在一些缺点,如危险性高、开发周期长、可移植性不强。C语言的应用领域主要是系统领域。 学习目标 学习C语言的目标是了解程序语言及...
接着,函数是C语言中的重要组成部分,用于组织代码并实现模块化。这里会有创建自定义函数的例子,以及对标准库函数如printf()和scanf()的使用。理解函数的参数传递和返回值对于编写高效代码至关重要。 内存管理是...
郝斌老师的课程涵盖了C语言的基本概念、数据类型、变量、运算符、流程控制、函数、指针等核心知识点。在学习过程中,应当注重理解算法、熟悉语法规则,并通过编写和调试程序来提升实践能力。此外,良好的编程习惯,...
在这个项目中,开发者设计了一个程序,用户需要编写C语言代码来控制角色在矿井中寻找出口,避开危险,最终成功逃生。这种方式将理论学习与实践操作相结合,极大地提高了学习者的兴趣和参与度。 首先,我们需要了解...
在C语言和C++语言中,指针是用来直接访问内存的一种方式。指针在使用不当的情况下非常容易出现问题,尤其是内存越界、野指针(未初始化或者已经释放的指针)、空指针访问等,都会造成程序的运行时错误,甚至导致程序...
【标题】:“C语言青蛙过河小游戏”是一个基于C语言编程的小型游戏,它模拟了青蛙试图通过一个布满危险的河流的场景。这个小游戏旨在帮助初学者理解基本的编程概念,如条件语句、循环控制和函数使用。 【描述】:...
试题二揭示了返回局部变量地址的危险。`GetMemory`函数中的`p`是一个局部自动变量数组,当函数返回时,它占用的内存被回收。然而,函数返回`p`的地址给`Test`函数,`str`被设为此地址。由于该内存区域已不再有效,...
2. 符号的颜色:地图上的颜色编码通常有特殊含义,如红色表示危险,绿色表示安全。C语言中可以使用RGB或十六进制值来指定颜色。 3. 符号的方向:某些符号可能需要根据其在地图上的方向进行旋转,如箭头或指向标志,...
《你必须知道的495个C语言问题》以问答的形式组织内容,讨论了学习或使用C语言的过程中经常遇到的一些问题。书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预...
课程规划包括C语言简介、基本编程知识、数据类型、运算符和表达式、流程控制、函数、数组、指针、变量的作用域和存储方式、扩展数据类型、专题等。每一讲都详细介绍了C语言的各个方面,帮助读者深入了解C语言。 四...