如何在C中检查用户输入的长度?

时间:2011-10-24 18:32:54

标签: c arrays input scanf

我对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小时制的持续时间。我应该以完全不同的方式接近这个吗?

谢谢,

2 个答案:

答案 0 :(得分:4)

简短的回答是:你做不到。

如果您想要读取字符串(scanf()),使用%s会特别危险。如果用户输入的输入数超过缓冲区可容纳的数量,则表示手上有缓冲区溢出。

另一方面,

fgets()允许您指定要读取的最大字节数,从而防止溢出缓冲区。

这是一个快速示例,说明如何为某些输入编写函数,验证输入是否在指定长度内并且是一个完整的行(以\n结尾 - 此例程丢弃{{1}来自输入):

\n

答案 1 :(得分:4)

scanf()允许使用最大宽度说明符:

因此scanf("%3s", buffer)最多可读取3个字符+ 1个NUL终止符。

相关问题