C数组第一个输入“\ 0”

时间:2017-04-12 08:57:22

标签: c arrays xcode

数组[a][b]应该在两个单独的行中分别接收4个数字,并输出?A?B,就像在着名的数字猜谜游戏中一样。 (例如,1234\n1347应该输出1A2B。)但是,我发现1上的a[0]\0取代而其他人仍然没有。 (附注:这发生在XCode上,但不发生在Visual Studio上。)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char a[4], b[4];
    int i, j;
    int A = 0, B = 0;

    scanf("%s%s",a,b);

    for(i=0;i<4;i++)
        if(a[i] == b[i])
            A++;
    for(i=0;i<4;i++)
        for(j=0;j<4;j++)
            if(a[i] == b[j])
                B++;

    B = B-A;

    printf("%dA%dB\n",A,B);

    return 0;
}

将数组更改为大小[5]可以解决问题,但我想了解发生了什么。谢谢!

1 个答案:

答案 0 :(得分:3)

C中的字符串实际上称为null terminated byte strings。该名称提示字符串有一个特殊的终结符,即'\0'字符。

四个字符的字符串需要五个字符的空间,第五个字符是空终止符。

当您使用scanf调用输入四个字符时,该函数将写入第五个(终止符)越界。写出界限会导致未定义的行为