我创建了一个将int映射到char的映射。 0-25到字母a-z和26-35 0-9。
for(int i = 0; i<26; i++)
{
letters.insert(Match::value_type(i,static_cast<char>(letter + x)));
x++;
}
for(int i = 26; i<36; i++)
{
letter = '0' + a;
letters.insert(Match::value_type(i,letter));
a++;
}
此处i
输入包含数字的pin[]
并查找该值。
std::map<int, char >::const_iterator it1 = letters.find(pin[0]);
std::map<int, char >::const_iterator it2 = letters.find(pin[1]);
std::map<int, char >::const_iterator it3 = letters.find(pin[2]);
std::map<int, char >::const_iterator it4 = letters.find(pin[3]);
char fourth = it4->second;
char third = it3->second;
char second = it2->second;
char first = it1->second;
char combo[] = { first, second, third, fourth};
cout << combo << endl;
一切正常但我的cout<< combo
给了我“abcd [[[[[[[[[[[[[[[[[[[[[[d]]]]] pPP。”
我不明白为什么......我想要的只是输出“abcd”我该如何清理它。
答案 0 :(得分:2)
您需要 null-terminate 您的字符串才能在C风格模式下使用它。所以这将改为:
char combo[] = { first, second, third, fourth, '\0'};
现在您在fourth
之后输出内存中的垃圾,直到找到null
个字符。
答案 1 :(得分:1)
char combo[] = { first, second, third, fourth};
定义一个包含4个字符序列的数组,但不包含可以打印的以null结尾的字符串。当执行cout << combo
时,输出流将此数组视为通用
C风格的字符串,即它尝试打印所有字符,直到它达到'\0'
。尝试:
char combo[] = { first, second, third, fourth, '\0'};