2

単純な文字列を *char の配列に解析しようとしていますが、何らかの理由で string.c_str() を使用すると、文字列全体が *char[0] に配置され、残りの配列は空白のままになります (私はもともとchar は 1 つの ASCII 文字しか保持できないと考えていましたが、ポインターとしては異なる動作をしていると思います)、誰かが私の関数をスキャンして、明らかな間違いがあるかどうか教えてもらえますか?

static void SetGame()
{
    // Variable Initiation
    int myRandom = rand() % (numOfWords - 1);
    lengthOfString = wordArray[myRandom].length();

    // Reinitiate Pointer Arrays
    stringArray = new string[lengthOfString];
    isDiscoveredArray = new bool[lengthOfString];

    // Parse string to the array of characters
    *stringArray = wordArray[myRandom].c_str();

    // Set each boolean array value to false
    for (int i = 0; i < sizeof(isDiscoveredArray); i++)
    {
        isDiscoveredArray[i] = false;
    }
}

これが私のポインターの減速です

// Global Variable and pointer Declerations
string *wordArray;
int numOfWords;
string *stringArray;
int lengthOfString;
bool *isDiscoveredArray;

何か案は?ありがとう。

4

2 に答える 2

3

ここでタイプを混合しています。最初に文字列の配列を作成してポインターに格納し、次にconst char*c_str から取得した最初の要素に割り当てます。string現在のコードは、選択した単語のすべての文字を作成する場合です。

「stringArray」const char*を既存のコードに合わせて作成しますが、メモリ割り当てを削除します

于 2012-11-14T19:15:48.113 に答える
1

std::string の配列があり、それを参照すると (つまり *stringArray)、stringArray[0] と同じになるため、常に配列の最初の要素になります。

コピーする文字列と同じ数の要素を持つ配列を設定しているため、文字列配列ではなく文字列を使用してコピーしたい場合があります。

char* (文字配列) であると想定される場合は、単純な代入を使用するのではなく、wordArray[myRandom].c_str() の結果であるソースを文字配列に明示的にコピーする必要があります。

于 2012-11-14T19:15:33.417 に答える