在C語言中,使用scanf
函數讀取數組時,可能會遇到邊界問題
%
操作符限制輸入字符串的長度。例如,如果你有一個字符數組char str[10]
,則應該使用%9s
來限制輸入長度為9個字符(最后一個位置留給字符串結束符’\0’)。char str[10];
scanf("%9s", str);
fgets
代替scanf
:fgets
函數可以自動處理邊界問題,因為它會在達到指定長度之前或遇到換行符時停止讀取。這樣可以確保不會超出數組邊界。char str[10];
fgets(str, sizeof(str), stdin);
檢查返回值:scanf
和fgets
函數都會返回成功讀取的項目數。在使用這些函數時,檢查返回值以確保正確讀取了所需的數據。
清空輸入緩沖區:在讀取字符串之后,清空輸入緩沖區以防止后續輸入受到影響。可以使用以下代碼片段清空輸入緩沖區:
int c;
while ((c = getchar()) != '\n' && c != EOF);
malloc
和realloc
)來分配足夠的內存。這樣可以根據實際需求分配內存,避免邊界問題。通過遵循上述建議,你可以有效地處理C語言中scanf
數組的邊界問題。