无法访问map元素(c ++)

时间:2015-04-10 11:58:07

标签: c++ dictionary format

我有一个非常奇怪的问题: 我正在读取一个xml文件,并将所有属性/值放在map<const char*, const char*> myMap中作为键/值。 我的问题是我可以通过迭代器访问和打印所有键/值,但我无法直接访问(*mymap)["key"]:程序在运行期间崩溃。

更奇怪的是:我可以添加一个已经在地图中的键,当我遍历地图并打印它时,我可以看到两个具有不同值的相同键!

我的猜测是我的xml文件可能有一个与通常的字符串格式略有不同的字符串格式,所以键看起来像字符串相同但它们可能不是二进制格式...

你对这个问题有任何想法吗?

1 个答案:

答案 0 :(得分:1)

您正在使用指向char(而不是c-string)的指针作为键。而指针实际上是内存中的一个地址,所以当你执行

(*mymap)["key"]

字符串文字“key”将作为四个元素的数组放置在堆栈顶部。由于您的密钥是pointe,因此第一个元素的地址将传递给操作符括号。这个值与您之前存储为键的内容没有任何共同之处,并且将为堆栈上的此指针创建一个新值,它将是一个空指针。

当您轻松比较c-strings

时会发生什么
const char* a = "key"; // Something like 0xac22f214 <- address on the stack
const char* b = "key"; // 0xac22f218
a == b; // False
a < b; // True
a > b; // False

为了您的目的,最好使用std :: string并弄清楚指针是如何工作的。