我对C来说很陌生,输入阅读让我很困惑。我正在尝试初始化一个大小为4的数组,但有时用户将输入3的有效输入。在Java中,我可以检查输入的长度并添加条件,但我不确定它在C中是如何工作的。
main(void){
char str[N];
int i;
for(i = 0; i < N; i++){
scanf("%c", &str[i]);
}
for(i = 0; i < N; i++){
printf("%c\n", str[i]);
}
}
现在,如果我输入4或更多,它可以正常工作。如果我输入3,它会中断。我希望它能处理3个或4个字符。
实际上,问题的根源是:我试图在C中找出一种在24小时制时间内读取的方法,并将其添加到24小时制的持续时间。我应该以完全不同的方式接近这个吗?
谢谢,
答案 0 :(得分:4)
简短的回答是:你做不到。
如果您想要读取字符串(scanf()
),使用%s
会特别危险。如果用户输入的输入数超过缓冲区可容纳的数量,则表示手上有缓冲区溢出。
fgets()
允许您指定要读取的最大字节数,从而防止溢出缓冲区。
这是一个快速示例,说明如何为某些输入编写函数,验证输入是否在指定长度内并且是一个完整的行(以\n
结尾 - 此例程丢弃{{1}来自输入):
\n
答案 1 :(得分:4)
scanf()
允许使用最大宽度说明符:
因此scanf("%3s", buffer)
最多可读取3个字符+ 1个NUL终止符。