c++ cout string打印其内存值

C++ cout string print its memory value

本文关键字:内存 打印 cout string c++      更新时间:2023-10-16

我正试图创建一个关键字,以一些逆转挑战周围。我决定试着用一种我不太懂的语言来写,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] = '';
        }
    }
    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,我将获得字符串而不是用户名的内存位置。所以我不确定发生了什么…谢谢你的帮助。div或

首先,尝试使用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 ();

编辑:

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

如果我理解正确的话,

string answer[20] = "";
应该

char answer[20];

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

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