c++ cout string打印其内存值
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] = ' ';
}
}
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
。
相关文章:
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- cout 打印内存地址而不是值
- C++打印奇怪的行为(潜在的内存泄漏?
- 为什么这是打印内存地址而不是值
- 在 Visual Studio 调试器中,如何从内存中打印字节范围?
- CRT 不打印内存泄漏的行号
- 在带有 (void*) 强制转换的字符串中打印字符的内存地址
- 使用数组和指针的动态内存分配无法打印
- 如果关闭娱乐后()所有内存都会被交易,则如何打印输出
- 为什么打印内存地址而不是 c+.+ 中的数组值
- 打印文本导致内存泄漏
- 将内存地址中的值打印为十六进制C++
- 打印2D阵列时内存泄漏
- 打印指针指向的内存位置和值
- 如何在计算机内存中打印长双重表示的二进制表示
- 如何在C++中打印已定义常量的内存地址
- 打印超过 NULL 字符的内存内容
- Ostream打印内存映射,然后倾倒核心
- Visual Studio 2010:如何将内存打印到文本文件