fgets比gets更安全,已成为替代选择。1. gets因不进行边界检查,易导致缓冲区溢出,已被c标准移除;2. fgets通过指定最大读取字符数(size-1),有效防止溢出;3. fgets会保留换行符,需手动去除;4. fgets返回buffer指针,失败或eof时返回null,可用于判断读取状态。

fgets
和
gets
都是 C 语言中用于从标准输入读取字符串的函数,但它们之间存在显著的区别,主要体现在安全性上。
gets
函数由于不进行边界检查,容易导致缓冲区溢出,因此已被弃用。
fgets
函数则提供了一定的安全性,允许指定读取的最大字符数,从而避免缓冲区溢出。

解决方案

fgets
函数从指定的流(通常是标准输入
stdin
)读取字符串,直到读取到换行符(
n
),文件结束符(
EOF
),或者读取了
size - 1
个字符为止。读取到的字符串会包含换行符,并在字符串末尾添加一个空字符