在我看来,我遇到了操作员的一种相当奇怪的行为new。下面的程序以一个字符串为输入,实际上只需要找出输入的字符个数——算法简化来演示问题,实际上所有变量都被全部使用——然后为一个name.length()字符数组。
问题的本质:当你输入一个字符串时,观察条件:name.length() % 8 == 0,额外的字符出现 - 额外的垃圾 - 在输出。
#include <iostream>
#include <string>
int main()
{
std::string name;
char * key;
getline(std::cin, name);
key = new char[name.length()];
for (unsigned i = 0; i < name.length(); i++)
{
key[i] = 'A';
}
std::cout << key << std::endl;
return 0;
}
- 输入数据:qwertyui;输出:AAAAAAAha>
- 输入数据:qwertyu;输出:AAAAAAA
您忘记了 C 字符串必须有一个终止空字符。因此,当输出到屏幕时,你的字符和它们之后的内存内容都会显示出来,直到遇到空......
更正的代码