在C語言中,gets()
函數用于從輸入流(通常是標準輸入)讀取一行字符串,直到遇到換行符為止。但是,gets()
函數存在緩沖區溢出的問題,因為它不會檢查輸入的長度是否超過了目標緩沖區的大小。這可能導致惡意用戶輸入過長的字符串,從而覆蓋其他內存區域,引發安全問題。
為了避免使用gets()
函數導致的緩沖區溢出問題,建議使用更安全的替代函數,如fgets()
。fgets()
函數允許你指定要讀取的最大字符數,從而避免緩沖區溢出。
以下是使用fgets()
函數的示例:
#include<stdio.h>
int main() {
char buffer[100];
printf("請輸入一行文本:");
fgets(buffer, sizeof(buffer), stdin);
printf("你輸入的文本是:%s", buffer);
return 0;
}
在這個示例中,我們使用fgets()
函數從標準輸入讀取一行文本,并將其存儲在buffer
數組中。sizeof(buffer)
參數告訴fgets()
函數最多讀取99個字符(加上字符串結尾的空字符),從而避免了緩沖區溢出。