C 語言中的 gets()
函數存在安全漏洞,因為它不會檢查輸入字符串的長度,可能導致緩沖區溢出
gets()
函數的原型如下:
char *gets(char *str);
在使用 gets()
函數時,程序員需要確保傳遞給 gets()
的字符數組足夠大,以容納用戶輸入的字符串。然而,gets()
并不會檢查這一點,因此如果用戶輸入的字符串超過了分配給字符數組的空間,就會導致緩沖區溢出。
為了解決這個問題,建議使用更安全的替代函數,如 fgets()
。fgets()
函數允許你指定要讀取的最大字符數,從而防止緩沖區溢出。以下是 fgets()
函數的原型:
char *fgets(char *str, int n, FILE *stream);
在這里,n
參數表示要從流中讀取的最大字符數。通過將 n
設置為字符數組的大小,可以確保不會發生緩沖區溢出。例如:
#include <stdio.h>
int main() {
char buffer[10];
printf("Enter a string: ");
fgets(buffer, sizeof(buffer), stdin);
printf("You entered: %s", buffer);
return 0;
}
在這個例子中,fgets()
函數將確保不會讀取超過 buffer
大小的字符串,從而防止緩沖區溢出。