输入字符串时,程序不打印字符

时间:2017-01-01 14:52:11

标签: c arrays string character

所以我有这段代码:

#include <stdio.h>
int main() {
    char B,y[2];
    scanf("%c",&B);
    scanf("%s",y);
    printf("%c\n",B);
}

当我输入像S这样的B字符时,那么y的字符就像a一样,它运行正常。 打印出来

a
S

但是,当我为ab输入2个字符时,它会打印两个字符,但不会打印出S。 它打印:

ab

我做错了吗?

1 个答案:

答案 0 :(得分:5)

首先,定义为char的{​​{1}}数组只能容纳一个y[2]而另一个空间保留,用于终止该数组的null表现为 string 。换句话说,它可以容纳的字符串的最大长度仅为1.

那就是说,根据理解,你应该改变

char

 scanf("%s",y);

限制输入长度。否则,您将遇到缓冲区溢出,它会调用undefined behavior

要详细说明在格式字符串中添加文字 scanf("%1s",y); 1表示最大字段宽度

引用1,章节§7.21.6.2, C11 ,(强调我的

  

从流中读取输入项,除非规范包含n说明符。 <强>一种   输入项被定义为输入字符的最长序列,不超过   任何指定的字段宽度,它是匹配输入序列的前缀,或者是匹配输入序列的前缀。 [....]