防止c中的数组溢出(?)[已关闭]

qrjkbowd  于 2023-01-04  发布在  其他
关注(0)|答案(1)|浏览(142)

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
6小时前关门了。
Improve this question
我正在做一个简单的连接4游戏在c的家庭作业,我几乎完成了我的游戏的所有其他功能的作品,但控制功能失败,只有当最后把字符接近边缘,这就是为什么我认为它失败,因为它试图检查数组外。数组维数是[7][7]和最后一行只是数字,以提高可见性。
我像这样控制阵列:

for (i = 1; i <= 3; i++) {
      if (c4[last / 10 - i][last % 10 + i] == c) {
        casa++;
      }
      if (c4[last / 10 + i][last % 10 - i] == c) {
        casa++;
      }
      if (c4[last / 10 - i][last % 10 - i] == c) {
        caso++;
      }
      if (c4[last / 10 + i][last % 10 + i] == c) {
        caso++;
      }
      if (c4[last / 10][last % 10 + i] == c) {
        yan++;
      }
      if (c4[last / 10][last % 10 - i] == c) {
        yan++;
      }
      if (c4[last / 10 + i][last % 10] == c) {
        dik++;
      }
      if (c4[last / 10 - i][last % 10] == c) {
        dik++;
      }
    }

例如:

  • O 0 O 0 0 0 0
  • XOX 0 0 0 0
  • O X O 0 0 0 0
  • X O X 0 0 0 0
  • O X O 0 0 0 0
  • X O X 0 0 0
  • 1 2 3 4 5 6 7

最后一个变量是一个int型变量,用来存储最后一个put字符,它的工作原理是将line_number * 10 + column_number-1相加。
最后一个put字符是粗体的O,它说玩家O赢了。有没有什么方法可以在不使代码过于复杂的情况下修复这个问题?

sulc1iza

sulc1iza1#

如果你只是想要一种调试的方法,也就是说,知道数组访问何时越界,那么就用函数来代替;

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

#define aSIZE 7
#define bSIZE 7

int check (int arr[aSIZE][bSIZE], int a,int b, int c)
{
    printf ("%d %d ",a,b);
    if (a >= aSIZE) return -1;  // out of bounds
    if (b >= bSIZE) return -1;  // out of bounds

    if (arr[a][b] == c) return 0;   // same
    return 1;                       // different
}

int main ()
{
    int c4[aSIZE][bSIZE];
    int last=80;
    int casa=0;
    int i,c=0;
    // example
    for (i=1; i<4; i++)
    {
        printf ("%d : ",i);
        if (!check(c4,(last/10-i),(last%10+i), c))
        {
           casa++;
           printf ("same\n");
        }
        else printf ("?\n"); // could be out of bounds or not the same
    }
}

相关问题