当我使用char指针指向单个char时,它似乎最终指向char数组。这里出了什么问题?
#include <iostream>
#include <map>
using namespace std;
int main() {
char first = 'a';
char second = 'b';
char third = 'c';
map<char, char *> myMap;
myMap['a'] = &first;
myMap['b'] = &second;
myMap['c'] = &third;
cout << myMap['a'] << endl; // ends up printing 'abc' or 'cba'
system("pause");
return 0;
}
答案 0 :(得分:6)
operator<<
的 char*
重载需要一个指向空终止字符数组的指针,以便它知道字符串的结束位置。只是碰巧你的char
变量在内存中连续分配,并且跟随它们的是0字节。代码调用了未定义的行为。
要打印单个字符,请取消引用指针:
cout << *myMap['a'] << endl;