在 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()
都是更好的選擇,因為它們提供了更好的緩沖區管理和安全性。