C++ cout 字符串打印其内存值

标签 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 我将得到字符串而不是用户名的内存位置。所以我不确定发生了什么.. 谢谢你的帮助, 或者

最佳答案

首先,尝试将 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]) 的解决方案会导致内存问题。

关于C++ cout 字符串打印其内存值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33051933/

相关文章:

c++ - 在 QDialog 上设置 Windows Flag 会隐藏表单

c++ - 在 C++ 中支持基于模式的不断发展的 XML 的技术

c++ - ADO Recordset Field Value to C++ vector/array(捕获指针值)

删除 R 中包含一定比例大写字母的行

c++ - 使用 cin 对象进行输入验证并清除缓冲区 (c++)

c++ - 预期初始化程序位于 '<' token 之前

c# - 检查字符串是否包含数值

python - 在python中将字符串/字符转换为整数

C++:无法解析标识符 cout、Netbeans、Ubuntu

c++ - C++ 中的 cout 没有打印出数组的值