C ++ cout string打印其内存值

时间:2015-10-10 08:29:36

标签: c++ string cout

我正在尝试为那里的一些逆转挑战创造一个关键因素。 我决定尝试用一种我不太了解的语言编写代码,c ++

我还不确定如何使用指针,但我认为没有它们我很好地实现了算法。唯一的问题是我打印答案我得到它的内存位置而不是所有的字符串。

char decrypt(char c, int position);
int main(){

    cout << "Enter username:" << endl;
    string username;
    string answer[20] = "";
    cin >> username;
    for (int i = username.length(); i > 0; i--){
        answer[username.length() - i] = decrypt(username[i-1],i);
        if (i == 0){
            answer[username.length() +1] = '\0';
        }
    }
    return 0;
}
char decrypt(char c, int position)
{
    if (position == 4){
         return '-'; }
    if (c > 'M'){
        c -= 17;    }
    else{
        c += 21;    }
    c ^= position;
    c ^= 2;
    return c;
}

如果我尝试打印字符串username,我将获得字符串而不是用户名的内存位置。所以我不确定发生了什么...... 谢谢你的帮助, 或

3 个答案:

答案 0 :(得分:3)

如果我理解你的问题,

string answer[20] = "";

应该是

char answer[20];

string answer[20]std::string的数组,而不是c风格的字符串(即char [])。

答案 1 :(得分:3)

首先,尝试将answer变量用作string而不是char*。如果需要,字符串会自动调整大小并调用其内部缓冲区。

代码可能如下所示:

string username;
string answer;
cin >> username;
for (int i = 0; i < username.length(); i++)
{
    answer += decrypt(username[i],i+1);
}

然后,如果要查看内部字符串缓冲区的内容,可以使用answer.c_str ();

编辑:

正如songyuanyao所说,您的代码使用string数组。但是,如果用户名大小为20或更大,使用20个字符数组(char answer [20])的解决方案会导致内存问题。

答案 2 :(得分:2)

在此代码中,answer不是字符串 - 它是一个包含20个字符串的数组。您可能希望char answer[20],或者更有可能想要创建单个字符串answer,并使用answer += character附加结果。