char []凌乱的输出

时间:2013-03-06 23:56:30

标签: c++ arrays iterator maps char

我创建了一个将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”我该如何清理它。

2 个答案:

答案 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'};