在 Linux 下,gets()
函数已经被认为是不安全的,因为它可能导致缓冲区溢出
fgets()
:这个函数用于从指定的文件流(如 stdin)中读取一行字符串。它比 gets()
更安全,因为你可以限制读取的字符数,从而避免缓冲区溢出。char buffer[256];
fgets(buffer, sizeof(buffer), stdin);
getline()
:这个函数类似于 fgets()
,但它会自动分配足够的内存来存储整行输入。你需要提供一个指向 char *
的指针和一个指向 size_t
的指针。当不再需要时,记得使用 free()
释放内存。#include<stdio.h>
#include <stdlib.h>
char *line = NULL;
size_t len = 0;
ssize_t read;
read = getline(&line, &len, stdin);
if (read != -1) {
printf("Read line: %s", line);
}
free(line);
scanf()
:这个函数可以用来从标准输入中读取格式化的数据。你可以使用 %s
格式说明符来读取字符串,并通过设置宽度来限制读取的字符数,从而避免缓冲区溢出。char buffer[256];
scanf("%255s", buffer);
请注意,scanf()
在处理空格和换行符时可能会有一些问题,因此在某些情况下可能不是最佳选择。
总之,你应该根据你的需求选择合适的替代方案。在大多数情况下,fgets()
或 getline()
都是更好的选择,因为它们提供了更好的缓冲区管理和安全性。