为什么我的 C 代码说 char 与其他 char 匹配,即使它确实如此?

Why does my C code say char matches other char even tho it does?

我正在用 C 语言制作一个简单的刽子手游戏,我正在尝试检查字符串中的每个字符是否与猜测的字符匹配。但是当我测试它时,它给出的结果是不正确的,一开始就不应该通过 if 语句。例如,当我输入字母 a(单词是 apple)时,它会给我 a__a。不知何故这个词变成了 4 个字母而不是 5 个字母,它说最后一个字母是 a 即使它不是。

https://imgur.com/a/DZDTbbj

#include <stdio.h>

int main() {
    int size = 0;
    char word[] = "apple", guess, hidden[size];
    while (word[size] != '[=10=]') {
        size++;
    }
    for (int i = 0; i < size; ++i) {
        hidden[i] = '_';
    }

    while (1) {
        printf("%s\n", hidden);
        scanf(" %c", &guess);
        for (int y = 0; y < size; ++y) {
            if (word[y] == guess) {
                hidden[y] = guess;
            }
        }
    }
    return 0;
}

您在将 size 的长度设置为 word 的循环之前声明了 hidden[size]。所以它使用初始值 0 作为数组的长度。

将该声明向下移动到循环之后。此外,您需要使长度 size+1 为空终止符留出空间,然后添加空终止符。

int main()
{
    int size=0;
    char word[]="apple",guess;
    while(word[size]!='[=10=]'){
        size++;
    }
    char hidden[size+1];
    for (int i = 0; i < size; ++i)
    {
        hidden[i]='_';
    }
    hidden[size] = '[=10=]';

    while(1){
        printf("%s\n",hidden );
        scanf(" %c",&guess);
        for (int y = 0; y < size; ++y)
        {
            if (word[y] == guess)
            {
                hidden[y]=guess;
            }
        }
    }

    return 0;
}