fgets() 缓冲区中超出边界检查的额外字符会怎样?
What happens to the extra characters in the fgets() buffer that are over the bounds check?
#include<stdio.h>
int main() {
char arr[10];
printf("Enter your name: \n");
fgets(arr, sizeof(arr), stdin);
puts(arr);
return 0;
}
我有一个 char arr[10]
并使用 fgets(arr, sizeof(arr), stdin)
来接收输入。如果我输入 20 个字符,9 个字符将被写入 arr[10]
以及添加的空终止符。但是缓冲区中剩余的字符会怎样呢?它们是自动获得 flushed/cleared 还是永远留在缓冲区中?即超出边界检查的额外字符会导致问题吗?
But what happens to the remaining chars in the buffer?
它们保留在 stdin
中用于下一个读取函数。
Do they get automatically flushed/cleared or are they left in the buffer forever?
留在 stdin
直到读取或程序结束。
Can extra chars that are outside the bounds check cause a problem?
不直接。这取决于您的程序如何应对读取过多输入失败。
#include<stdio.h>
int main() {
char arr[10];
printf("Enter your name: \n");
fgets(arr, sizeof(arr), stdin);
puts(arr);
return 0;
}
我有一个 char arr[10]
并使用 fgets(arr, sizeof(arr), stdin)
来接收输入。如果我输入 20 个字符,9 个字符将被写入 arr[10]
以及添加的空终止符。但是缓冲区中剩余的字符会怎样呢?它们是自动获得 flushed/cleared 还是永远留在缓冲区中?即超出边界检查的额外字符会导致问题吗?
But what happens to the remaining chars in the buffer?
它们保留在 stdin
中用于下一个读取函数。
Do they get automatically flushed/cleared or are they left in the buffer forever?
留在 stdin
直到读取或程序结束。
Can extra chars that are outside the bounds check cause a problem?
不直接。这取决于您的程序如何应对读取过多输入失败。