C 数组第一个输入 "\0"

标签 c arrays xcode

数组 [a][b]应该在两行中分别输入 4 个数字,并输出 ?A?B ,就像著名的猜数字游戏一样。 (例如,1234\n1347 应该输出 1A2B 。)但是,我发现 1a[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]解决了问题,但我想了解发生了什么。谢谢!

最佳答案

C 中的字符串实际上叫做null terminated byte strings .该名称暗示字符串有一个特殊的终止符,即 '\0' 字符。

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

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

关于C 数组第一个输入 "\0",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43364873/

相关文章:

c++ - 我们可以在没有#ifdef __cplusplus 的情况下在C 文件中使用extern "C"吗?

c - 在 Linux 的 Raspberry Pi 上使用 C 语言从头开始进行 I²C 通信

javascript - 使用脚本添加两个同名的数组值

PHP Insert into table 不创建新的数据行

c++ - 关于 C 中的 C++ 类访问/操作

javascript - 如何获取对象中数组的索引

cocoa - 带有菜单栏图标的简单 Cocoa 应用程序。如何:?

ios - Tableview Like Snapchat 发送功能(多选和可滑动标签)

ios - 这些 Dsymutil 警告在 XCode 4.5 中意味着什么?

objective-c - 如何将 MJPEG 帧解码为 JPEG