C++ 字符[]混乱输出

C++ 字符[]混乱输出,c++,arrays,iterator,maps,char,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

我创建了一个将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++;
}
一切正常,但我的
不行
定义一个数组,该数组包含4个字符的序列,但不包含可以打印的以null结尾的字符串。当
cout
定义一个数组,该数组包含4个字符的序列,但不包含可以打印的以null结尾的字符串。当
cout时,您需要null终止字符串,以便能够在C风格模式下使用它。因此,这将变为:

char-combo[]={第一、第二、第三、第四,'\0'};
现在,您正在输出内存中
第四个
之后的垃圾,直到找到
null
字符。

您需要null终止字符串才能在C样式模式下使用它。因此,这将变为:

char-combo[]={第一、第二、第三、第四,'\0'};

现在,您正在输出内存中
fourth
之后的垃圾,直到找到
null
字符。

对不起。出于某种原因,它被删掉了,但在这里我不明白@JesseGood。我的组合为空???请努力格式化您的代码。代码足够复杂,没有噪音和干扰。您希望能够按照预期查看代码,而不会出现“意外”。特别是如果你希望别人阅读你的代码。顺便问一下,为什么要用
std::map
来表示字母?我建议使用
inline
函数通过
static_cast
@user1665569进行转换:如果要将字符数组假装为字符串来打印它,那么它需要一个零值字符(也称为“空终止符”)来标记结束。这就是老式C型弦的工作原理。对不起。出于某种原因,它被删掉了,但在这里我不明白@JesseGood。我的组合为空???请努力格式化您的代码。代码足够复杂,没有噪音和干扰。您希望能够按照预期查看代码,而不会出现“意外”。特别是如果你希望别人阅读你的代码。顺便问一下,为什么要用
std::map
来表示字母?我建议使用
inline
函数通过
static_cast
@user1665569进行转换:如果要将字符数组假装为字符串来打印它,那么它需要一个零值字符(也称为“空终止符”)来标记结束。这就是老式C型弦的工作原理。
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;
char combo[] = { first, second, third, fourth};
char combo[] = { first, second, third, fourth, '\0'};