C++ cout 字符串打印其内存值
C++ cout string print its memory value
我正在尝试为周围的一些逆转挑战创建一个注册机。
我决定尝试用一种我不太了解的语言对其进行编码,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] = '[=10=]';
}
}
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
我将得到字符串而不是用户名的内存位置。所以我不确定发生了什么..
谢谢你的帮助,
或者
如果我正确理解你的问题,
string answer[20] = "";
应该是
char answer[20];
string answer[20]
是 std::string
的数组,不是 c 风格的字符串(即 char[])。
首先,尝试将 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]
) 的解决方案会导致内存问题。
在此代码中,answer
不是字符串——它是一个包含 20 个字符串的数组。您可能希望 char answer[20]
,或者更有可能创建单个字符串 answer
并将结果附加 answer += character
。
我正在尝试为周围的一些逆转挑战创建一个注册机。 我决定尝试用一种我不太了解的语言对其进行编码,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] = '[=10=]';
}
}
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
我将得到字符串而不是用户名的内存位置。所以我不确定发生了什么..
谢谢你的帮助,
或者
如果我正确理解你的问题,
string answer[20] = "";
应该是
char answer[20];
string answer[20]
是 std::string
的数组,不是 c 风格的字符串(即 char[])。
首先,尝试将 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]
) 的解决方案会导致内存问题。
在此代码中,answer
不是字符串——它是一个包含 20 个字符串的数组。您可能希望 char answer[20]
,或者更有可能创建单个字符串 answer
并将结果附加 answer += character
。