数组越界而没有给出任何错误

Array goes of out of bounds without giving any errors

我的教授让我用 C 语言制作一个 Codebreaker 游戏。(用户通过猜测原始代码来破解代码。原始代码作为 cmd 行给出 arg.After 每次尝试;(b,w) :正确位置的正确颜色数 (b) 和属于代码但不在正确位置的颜色数 (w) 打印为反馈。)仅允许标准输入和输出。我让它工作了,但是数组 Secret_Code2guess2 超出了范围。它有一些奇怪的行为,比如改变 int 变量会导致数组发生变化,即使它们是独立的。我知道 C 不检查数组边界,我可以做些什么改进吗? 这是我的代码;

#include <stdio.h>

#define Max_Attempts 12
char *Sectret_CODE = NULL;

int main(int argc,char **argv)
{

    //Definitions
    printf("Available Colors: (B)lue (G)reen (O)range (P)urple (R)ed (Y)ellow\n\n");

    //Getting input and validating
    if(argc != 2)
    {
        fprintf(stderr,"Invalid input\n");
        return 1;
    }
    
    
    Sectret_CODE = argv[1]; 

    int i = Max_Attempts;
    int Won = 0;
    while (i > 0 && !Won)
    {
        int b = 0, w = 0, t=0;
        char guess[4]; 
        char Sectret_CODE2[4];
        char guess2[4];
        printf("No. guesses left: %i\n",i);
        printf("Enter Your Guess: ");
        scanf("%s",guess);
        //printf("%s",guess);
        for(int j = 0; j < 4; j++)
        {
            //printf("%s,%s\n",Sectret_CODE2,guess2);
            if(Sectret_CODE[j] == guess[j])
            {
               b++; 
            }
            else
            {
                Sectret_CODE2[t] = Sectret_CODE[j];
                guess2[t] = guess[j];
                t++;
                printf("%s,%s,%i\n",Sectret_CODE2,guess2,t);
            }

        } 
        int s = t;
        //printf("%i",t);
        Sectret_CODE2[t] = '[=10=]' ;
        guess2[t] = '[=10=]' ;
        

        if(b == 4)
        {
            printf("You Won\n");
            Won = 1;
            return 0;
        }  
        else
        {
            for(int j = 0; j < s; j++)
            {
                for(int k = 0; k < s;k++)
                if(Sectret_CODE2[j] == guess2[k])
                {
                    w++;
                    break;
                }
            }
        }
        printf("Feedback: %i,%i\n",b,w);
        i--;
    }

    if(!Won)
    {
        printf("You Lose!\n");
    }
}



 

您没有为字符数组中的终止空字符分配 space。每个数组最多需要保存 4 个值,加上 一个终止空字符。所以你需要声明它们包含 4+1 = 5 个字符。否则写空字符可以写到数组的末尾。

此外,在您的循环中,您试图在以空值终止它们之前使用 printf%s 打印这些数组。在使用 %s.

打印它们之前,您需要在适当的时候以 null 终止它们