为什么我的代码跳过数组中的第一个数字?

时间:2016-02-24 06:13:41

标签: c

当我尝试打印出' a' index [0],我没有收到值。 我的意见是' 1111'并且输出不会为索引0提供任何内容。如果我使用for循环打印出所有元素,我只得到三个元素,' 111'。

int main(int argc, const char * argv[])
{

    char a[4]; 
    char b[4];

    printf("Input the first binary character: \n");

    scanf("%s",a);

    printf("Input the second binary character: \n");

    scanf("%s",b);

    printf("%c",a[0]);
    return 0;
}

1 个答案:

答案 0 :(得分:2)

您的输入缓冲区非常小:

    char a[4]; 
    char b[4];

这些缓冲区最多可以包含三个字符,因为它们还必须为treminating null字符保留空间。

来自用户的输入可能不安全;用户很可能不遵守三个字符的限制。因此,您应该在扫描数字时强制执行限制:

    scanf("%3s",a);

将缓冲区放大可能也是一个好主意。即使您不希望允许大于7的二进制数,您也应该读取一个更大的字符串,并在它更长或包含非二进制数字时发出合适的错误消息。请注意,scanf也有返回值。它不太可能,但用户可能通过按Ctrl-D或Ctrl-Z来结束输入流。你的代码应该处理这种情况。