c - 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]
以及添加的空终止符。但是缓冲区中剩余的字符会发生什么?它们会自动刷新/清除还是永远留在缓冲区中?即超出边界检查的额外字符会导致问题吗?
解决方案
但是缓冲区中剩余的字符会发生什么?
它们保留stdin
在下一个读取功能中。
它们会自动刷新/清除还是永远留在缓冲区中?
一直保留stdin
到读取或程序结束。
超出边界检查的额外字符会导致问题吗?
不是直接的。这取决于您的程序如何处理无法读取多余的输入。
推荐阅读
- flutter - 在 Flutter 中,为什么有些动画类需要 vsync 而有些则不需要?
- r - Shiny R中verticalProgress的转置
- java - 大型 Hashmap 的 Android 性能问题
- c++ - For 循环中的 OpenMP 并行部分 (C++) - 开销
- amazon-web-services - 使用多可用区部署从快照还原 RDS 数据库实例
- angular - Ionic 3 Search 取消时不刷新列表
- r - 参数化 R 数据表中的列名
- c# - 运行多个 Powershell 命令的最佳方式?
- javascript - javascript/jquery:运行点击功能后滚动功能不起作用
- node.js - Node.js typeerror 无法设置未定义的属性