C ++向字符串添加额外的,不需要的字符

时间:2015-08-05 03:07:24

标签: c++ string

我有一个错误,我找不到通过谷歌搜索修复。我正在尝试制作游戏Mastermind的基于文本的版本。我正在使用一个字符串,它是从一个字符数组中设置的,作为while循环的标准。当字符串等于“****”时,游戏应该告诉玩家他们赢了并退出,但由于某种原因,^ A被添加到正在检查的字符串的末尾,即使它不在char数组中。

这是设置char数组并从该数组中返回字符串的函数:

string check(int guess[4], int num[4]) {

    char hints[4];

    cout << "        ";

    for (int i = 0; i < 4; i++) {

        if (guess[i] == num[i]) {

            hints[i] = '*';
            cout << "*";

        }
        else {

            for (int x = 0; x < 4; x++) {

                if (guess[i] == num[x]) {

                    cout << "+";

                }

            }
        }

        if (guess[i] != num[i]) {

            hints[i] = ' ';

        }

    }

    string hint(hints);

    cout << endl;
    cout << hint << endl;

    return hint;

}

这是检查字符串值的函数:

while (hints.compare("****") != 0) {

        if (guessCount == 5) {

            break;

        }

        cout << "Guess?: ";
        cin >> guess;

        intToArray(guess, guessArr);

        hints = check(guessArr, nums);

        cout << hints << endl;

        guessCount++;

    }

    if (hints.compare("****") == 0) {

        cout << "You win! The number was: ";

        for (int i = 0; i < 4; i++) {

            cout << nums[i];

        }

    }

1 个答案:

答案 0 :(得分:4)

你没有空终止hints数组,所以你的字符串堆栈中会有额外的垃圾。

您可以让hint字符串知道构建它时的长度。

string hint(hints, 4);

cout << endl;
cout << hint << endl;