在C語言中,使用scanf()
函數讀取數組時,為了防止緩沖區溢出(buffer overflow),可以采取以下方法:
%
和一個數字來限制輸入的字符數。例如,如果你有一個長度為10的字符數組,可以使用%9s
來確保只讀取9個字符,并將最后一個位置留給字符串結束符’\0’。char str[10];
scanf("%9s", str);
fgets()
函數:
fgets()
函數可以從輸入流中讀取指定長度的字符串,并自動添加字符串結束符’\0’。這樣可以確保不會超出數組的大小。char str[10];
fgets(str, sizeof(str), stdin);
檢查返回值:
檢查scanf()
和fgets()
函數的返回值,以確保正確讀取了數據。如果返回值為0或者EOF,表示沒有成功讀取到數據。
清空輸入緩沖區: 如果輸入的字符數超過了數組的大小,可能會導致輸入緩沖區中仍然存在未處理的字符。在這種情況下,需要清空輸入緩沖區,以避免影響后續的輸入操作。
void clear_input_buffer() {
int c;
while ((c = getchar()) != '\n' && c != EOF) {
continue;
}
}
在使用scanf()
讀取數組時,請始終注意防止緩沖區溢出,以避免潛在的安全風險。