c - 为什么 gets() 比 scanf() 更危险?

标签 c

在我看来,两者都有可能溢出缓冲区。然而,我被建议永远不要使用 gets(),但仍然鼓励我使用 scanf()。

仅仅是因为 scanf() 中允许的格式化参数还是有其他原因?

最佳答案

gets 函数没有针对缓冲区溢出的保护。

使用scanf 格式字符串,您可以定义要从标准输入读取并存储在给定内存缓冲区中的字符串的最大长度。例如,使用 scanf("%10s\n", str); 最多可读取 10 个字符。 str 缓冲区应为 11 个字节以存储 NULL 终止字符。

在性能方面,如果您只使用 scanf 来解决 gets 的缓冲区溢出问题,请改用 fgets 函数。

关于c - 为什么 gets() 比 scanf() 更危险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15390675/

相关文章:

STM32处理器与SD卡通信-SDIO协议(protocol)

c - 如何使用 Win32 API 将字符串传递给 DLL?

从 Node.js 客户端连接到 C 服务器

c - MikroC、dsPIC UART 接收中断问题

c - 将 unsigned int 传递给函数是否会导致其丢失位?

python - WAF——合并静态库

在我的代码中找不到最大值和最小值

c++ - 如何使用 scanf 从用户输入中获取字符串 ( char * ),由双引号分隔并包含空格

c++ - 在运行时访问任何结构成员

c - 为什么 BLAS dsyrk 比简单的 C 实现更精确?