在 Linux 下,gets()
函数存在安全漏洞,因为它不会检查输入字符串的长度,可能导致缓冲区溢出
使用 fgets()
替代 gets()
:
fgets()
函数允许你指定要读取的最大字符数,这有助于防止缓冲区溢出。例如:
char buffer[256];
fgets(buffer, sizeof(buffer), stdin);
使用 getline()
函数(GNU 扩展):
getline()
函数会自动分配足够的内存来存储输入行。但请注意,getline()
是 GNU 扩展,可能在非 GNU 系统上不可用。
#include<stdio.h>
#include <stdlib.h>
int main() {
char *line = NULL;
size_t len = 0;
ssize_t read;
while ((read = getline(&line, &len, stdin)) != -1) {
printf("Read: %s", line);
}
free(line);
return 0;
}
使用 scanf()
函数并限制输入长度:
使用 %
符号后跟一个数字来限制读取的字符数。例如:
char buffer[256];
scanf("%255s", buffer);
请注意,这些方法都需要对输入进行适当的处理,以确保其符合预期的格式和长度。在处理用户输入时,始终要保持谨慎。