-1

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

strcpy(arrWords[count],letters8); strcpy(arrWords[count],letters7); ...

^ 直到字母3 ^

我只想知道我用诸如那些代码行存储到二维数组中到底有什么问题。此外,如果您能给我任何有关如何将这些创建的单词准确存储到二维数组(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;
 }



}

非常感谢您提供帮助!

4

1 回答 1

0

strcpy is used for copying C-strings, not arrays.

This function looks for string ending null character '\0' for the source and destination inputs so that it knows where to stop copy operation. But in the case of array, it may not find this character for a long memory sequence and you get segmentation error.

Instead, you can use std::copy() like this:

std::copy(std::begin(letters3),std::end(letters3), arrWords[count] );
于 2013-04-15T05:18:17.070 回答