2D阵列的简单问题

时间:2013-04-15 04:48:14

标签: c++ multidimensional-array segmentation-fault

所以这是我正在为课堂工作的程序中的一个函数。在函数中,我想要使用checkDictionary函数验证的3,4,5,6,7和8个字母单词的8个字符组合。一切都工作正常和花花公子,但当我想将这些创建的单词存储到二维数组的字符(基本上是一维字符串数组)时,我得到一个分段错误错误。显然导致这些问题的线条如下:

的strcpy(arrWords [COUNT],letters8); 的strcpy(arrWords [COUNT],letters7); ...

^直到letters3 ^

我只是想知道我用二维代码行存储到二维数组中到底出了什么问题。另外,如果你能给我任何关于如何准确地将这些创建的单词存储到二维数组(arrWords)中的建议,我们将不胜感激。非常感谢您的参与! :d

其他:

  • 此程序基本上是拼字游戏

  • 增加i&的循环j用于递增通过填充有“。”的10x10的2d阵列板。并且由用户放置了单词。

- 字典有40438个实际单词

void computerMove(char dictionary[][45], char arrBoard[11][11], char computer[9])
{
  char let1, let2, let3, let4, let5, let6, let7, let8;


//      char letters3[4];
//      char letters4[5];
//      char letters5[6];
//      char letters6[7];
//      char letters7[8];
//      char letters8[9];
  int count = 0;


  char arrWords[40438][10];






    for (int i=0; i<10; i++)
    {
        for (int j=0; j<10; j++)
        {
         //   if (arrBoard[i][j]!='*')
            let1=arrBoard[i][j];

                for (int a=0; a<8; a++)
                {
                    let2=computer[a];

                        for (int b=0; b<8; b++)
                        {
                            let3=computer[b];
                            char letters3[4]={let1,let2,let3};
                            cout<<letters3<<endl;
                            if (searchDictionary(dictionary,letters3,40438)==true)
                           strcpy(arrWords[count],letters3);
                            count++;


                                for (int c=0; c<8; c++)
                                {
                                    let4=computer[c];
                                    char letters4[5]={let1,let2,let3,let4};
                                    if (searchDictionary(dictionary,letters4,40438)==true)
                                    strcpy(arrWords[count],letters4);
                                    count++;

                                        for (int d=0; d<8; d++)
                                        {
                                            let5=computer[d];
                                            char letters5[6]={let1,let2,let3,let4,let5};
                                            if (searchDictionary(dictionary,letters5,40438)==true)
                                            strcpy(arrWords[count],letters5);
                                            count++;

                                                for (int e=0; e<8; e++)
                                                {
                                                    let6=computer[e];
                                                    char letters6[7]={let1,let2,let3,let4,let5,let6};
                                                    if (searchDictionary(dictionary,letters6,40438)==true)
                                                    strcpy(arrWords[count],letters6);
                                                    count++;

                                                        for (int f=0; f<8; f++)
                                                        {
                                                            let7=computer[f];
                                                            char letters7[8]={let1,let2,let3,let4,let5,let6,let7};
                                                            if (searchDictionary(dictionary,letters7,40438)==true)
                                                            strcpy(arrWords[count],letters7);
                                                            count++;

                                                                for (int g=0; g<8; g++)
                                                                {
                                                                    let8=computer[g];
                                                                    char letters8[9]={let1,let2,let3,let4,let5,let6,let7,let8};
                                                                    if      (searchDictionary(dictionary,letters8,40438)==true)
                                                                         strcpy(arrWords[count],letters8);
                                                                    count++;
                                                                }
                                                        }
                                                }
                                        }
                                }
                        }
                }
        }
//            cout<<"YOURE OVER HERE PAL!"<<endl;
 //    for (int z=0; z<50; z++)
//    cout<<arrWords[z]<<endl;
 }



}

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

strcpy用于复制C字符串,而不是数组。

此函数查找源和目标输入的字符串结尾空字符'\0',以便它知道停止复制操作的位置。但是在数组的情况下,它可能找不到长字符序列的这个字符并且你得到分段错误。

相反,您可以像这样使用std::copy()

std::copy(std::begin(letters3),std::end(letters3), arrWords[count] );