字符串下标超出范围c ++

时间:2015-03-15 21:37:00

标签: c++ error-handling

我需要一个非常基本的c ++代码的帮助。 我的程序是关于猜测名称游戏我遇到的问题是通过char

读取字符串char
#include <iostream>
#include <time.h>
#include <iomanip>
#include <stdlib.h>
#include <fstream>
#include <string>


using namespace std;

void Play(int, int,int, string[], string[]);
string GetRandomName(int, int, int , string[], string[]);
const int ArrayMax = 100;



void Play(int selection, int FArraySize, int  MArraySize,string Female[], string Male[])

        {
            int MAX_TRIES = 3;
            int i=0;
            ofstream ofFile;
            ifstream InFile;
            int num_of_wrong_guesses=0;
            char letter;
            string GuessedName;
            GuessedName = GetRandomName(selection, FArraySize, MArraySize, Female, Male);

            cout << "Guess the following name:" << endl;

            while (GuessedName[i]!= 0 ){
                cout<<"?";
                i++;
            }

            cout << "\nEnter a guess letter? or * to enter the entire name" << endl;
            cin >> letter;

            return;
        }

我没有完成编码......

问题在于while循环如何在不使用cstring的情况下解决它? 你能救我吗?

2 个答案:

答案 0 :(得分:1)

int i = 0;

while(GuessedName[i] != 0)
{
    cout << "?";
    i++;
}

好像你正在尝试打印?的序列,并猜测字符串的长度。但是你不能将std::string视为c-string。当其长度为n时,GuessedName[n]是字符串下标超出范围 - 您无法访问一个结尾的元素 - 它不是以空值终止的。用于循环:

for(int i = 0; i < GuessedName.length(); ++i)
    cout << "?";

或者简单地说:

cout << std::string(GuessedName.length(), '?');

答案 1 :(得分:0)

像这样更改while循环:

        while (GuessedName[i]){
            cout<<"?";
            i++;
        }