阅读量:0
在 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()
都是更好的选择,因为它们提供了更好的缓冲区管理和安全性。