2

我正在尝试将一个简单的字符串解析为 *char 数组,由于某种原因,当我使用 string.c_str() 时,它将整个字符串放入 *char[0] 并且数组的其余部分留空(我最初认为字符只能包含一个 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 的第一个元素分配给 a。string如果您要为所选单词中的每个字符创建一个,则您当前拥有的代码将是。

使您的 "stringArray" aconst char*适合您已有的代码,但删除内存分配

于 2012-11-14T19:15:48.113 回答
1

你有一个 std::string 数组,当你尊重它时(即 *stringArray)它与 stringArray[0] 相同,所以这就是为什么它总是进入数组的第一个元素。

由于您设置的数组具有与要复制的字符串相同数量的元素,因此您可能只想使用字符串而不是字符串数组将其复制到其中。

如果它应该是 char*(字符数组),那么您将需要将作为 wordArray[myRandom].c_str() 的结果的源显式复制到您的字符数组中,而不是使用简单的赋值。

于 2012-11-14T19:15:33.417 回答