首页 > 解决方案 > fgets() 缓冲区中超出边界检查的额外字符会发生什么情况?

问题描述

#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]以及添加的空终止符。但是缓冲区中剩余的字符会发生什么?它们会自动刷新/清除还是永远留在缓冲区中?即超出边界检查的额外字符会导致问题吗?

标签: cbufferfgetsextra

解决方案


但是缓冲区中剩余的字符会发生什么?

它们保留stdin在下一个读取功能中。

它们会自动刷新/清除还是永远留在缓冲区中?

一直保留stdin到读取或程序结束。

超出边界检查的额外字符会导致问题吗?

不是直接的。这取决于您的程序如何处理无法读取多余的输入。


推荐阅读