gets()
函數(shù)在 C 語言中用于從標準輸入讀取一行文本,并將其存儲到指定的字符數(shù)組中。然而,gets()
函數(shù)存在緩沖區(qū)溢出的風險,因為它不檢查目標數(shù)組的大小。為了防止緩沖區(qū)溢出,可以使用以下替代方法:
fgets()
函數(shù):fgets()
函數(shù)允許您指定接收字符串的最大長度,從而避免緩沖區(qū)溢出。以下是一個使用 fgets()
的示例:
#include <stdio.h>
int main() {
char buffer[100];
printf("Enter a string: ");
fgets(buffer, sizeof(buffer), stdin);
buffer[strcspn(buffer, "\n")] = 0; // 去除換行符
printf("You entered: %s", buffer);
return 0;
}
scanf()
函數(shù):scanf()
函數(shù)在讀取字符串時,會在遇到空格、制表符或換行符時停止讀取。這可以防止緩沖區(qū)溢出。以下是一個使用 scanf()
的示例:
#include <stdio.h>
int main() {
char buffer[100];
printf("Enter a string: ");
scanf("%99s", buffer); // 限制最大長度為99,留出一個字符用于存儲換行符
buffer[strcspn(buffer, "\n")] = 0; // 去除換行符
printf("You entered: %s", buffer);
return 0;
}
請注意,這兩種方法都會在讀取到換行符時停止讀取。如果您需要讀取整行(包括換行符),可以使用 fgets()
函數(shù),并在去除換行符后處理字符串。