我坚持这一点,我希望能得到一些帮助。我有一个项目,基本上是一个词搜索。程序读取一个文件,该文件包含行和列,后跟单词搜索拼图本身。您需要从word search中创建字符串的可能组合,并使用另一个文本文档提供的词典检查这些组合。
下面是一个在第一行和第二行中读取的文件示例,后跟单词搜索拼图:

4 4
syrt
gtrp
faaq
pmrc

因此,除了为上述文件创建字符串的函数之外,我已经能够使大部分代码正常工作。基本上,它需要搜索wordsearch并创建字符串,每个创建的字符串都被传递给另一个函数来检查它是否在字典中。然而,我的代码在创建字符串时总是超出界限,并且它继续导致Seg错误,这真的很令人沮丧。
这些是声明的常量,在搜索单词搜索拼图以寻找可能的字符串组合时它的每个可能的方向
const int DX_SIZE = 8;
const int DX[] = {-1,-1,-1,0,0,1,1,1};
const int DY[] = {-1,0,1,-1,1,-1,0,1};

这是我必须创建字符串的函数:
int strCreate(char** puzzle, char** dictionary, int n, int rows, int col){

int x, y;
int nextX, nextY, i;
char str[20] = {0};
int length = 1;

for(x = 0; x < rows; x++)
  {

    for(y = 0; y < col; y++)
     {

        //Grabs the base letter
        str[0] = puzzle[x][y];
        length = 1;
        for(i = 0; i < DX_SIZE; i++)
         {

          while(length < MAX_WORD_SIZE)
          {

             nextX = x + DX[i]*length;
             nextY = y + DY[i]*length;


            // Checking bounds of next array
            //This is where I'm having trouble.

            if((x + nextX) < 0 || (nextX + x) > (col-1)){
                printf("Out of bounds\n");
                break;
            }

            if((y + nextY) < 0 || (nextY + y) > (rows-1)){
                printf("Out of bounds\n");
                break;
            }

            str[length] = puzzle[nextX][nextY];


            //search for str in dictionary
            checkStr(str, dictionary, n);
            length++;
            }
            memset(&str[1], '\0', 19);
         }
      }
   }
return 0;
}

我知道我没有检查好界限,只是不知道怎么做。当X=1和nextX=-1通过边界检查时,如果数组在谜题[0][0]处,则nextX会将谜题[-1][0]放入边界之外,从而导致seg故障。
感谢您抽出时间阅读,我非常感谢您的帮助。

最佳答案

nextX和nextY是用于访问数组拼图的索引。那么数组绑定检查也应该包含相同的内容。但是数组绑定检查包括例如x+nextX。

        // Checking bounds of next array
        //This is where I'm having trouble.

        if((x + nextX) < 0 || (nextX + x) > (col-1)){
            printf("Out of bounds\n");
            break;
        }

例子:
如果(nextXprintf(“出界…\n”);

10-07 19:46