gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:56:47 24 4
gpt4 key购买 nike

数组 [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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com