Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
fgets()缓冲区中超出边界检查的额外字符会发生什么情况? #包括 int main(){ char-arr[10]; printf(“输入您的姓名:\n”); fgets(arr、sizeof(arr)、标准DIN); puts(arr); 返回0; }_C_Buffer_Fgets_Extra - Fatal编程技术网

fgets()缓冲区中超出边界检查的额外字符会发生什么情况? #包括 int main(){ char-arr[10]; printf(“输入您的姓名:\n”); fgets(arr、sizeof(arr)、标准DIN); puts(arr); 返回0; }

fgets()缓冲区中超出边界检查的额外字符会发生什么情况? #包括 int main(){ char-arr[10]; printf(“输入您的姓名:\n”); fgets(arr、sizeof(arr)、标准DIN); puts(arr); 返回0; },c,buffer,fgets,extra,C,Buffer,Fgets,Extra,我有一个char-arr[10]并使用fgets(arr,sizeof(arr),stdin)接收输入。如果我输入20个字符,9个字符将写入arr[10],并添加空终止符。但是缓冲区中剩余的字符会发生什么变化呢?它们是自动刷新/清除还是永远留在缓冲区中?i、 e.超出边界检查的额外字符是否会导致问题 但是缓冲区中剩余的字符会发生什么变化呢 它们保持在stdin中,用于下一个读取功能 它们是自动刷新/清除还是永远留在缓冲区中 在stdin中保留,直到读取或程序结束 超出边界检查的额外字符会导致问题

我有一个
char-arr[10]
并使用
fgets(arr,sizeof(arr),stdin)
接收输入。如果我输入20个字符,9个字符将写入
arr[10]
,并添加空终止符。但是缓冲区中剩余的字符会发生什么变化呢?它们是自动刷新/清除还是永远留在缓冲区中?i、 e.超出边界检查的额外字符是否会导致问题

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

它们保持在
stdin
中,用于下一个读取功能

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

stdin
中保留,直到读取或程序结束

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


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

如果fgets放入字符数组的字符串不包含新行字符,则表示输入缓冲区包含其他字符,您可以使用fgets的一次调用读取这些字符。它们将保留在输入缓冲区中,直到您读取它们为止。只有当程序不能正确处理短读时,它们才会导致问题。
#include<stdio.h>

int main() {
    char arr[10];
    printf("Enter your name: \n");
    fgets(arr, sizeof(arr), stdin);
    puts(arr);
    return 0;
}