在 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);
請注意,這些方法都需要對輸入進行適當的處理,以確保其符合預期的格式和長度。在處理用戶輸入時,始終要保持謹慎。