无法访问地图元素 (C++)
can't access to map element (c++)
我有一个很奇怪的问题:
我正在阅读 xml 文件并将所有 attribute/value 放入 map<const char*, const char*> myMap
中作为 key/value。
我的问题是我可以通过迭代器访问和打印所有 keys/values,但我无法直接访问它 (*mymap)["key"]
:程序在 运行.
期间崩溃
更奇怪的是:我可以添加一个已经在地图中的键,当我遍历地图并打印它时,我可以看到两个具有不同值的相同键!
我的猜测是我的 xml 文件的字符串格式可能与通常的格式略有不同,因此键看起来与字符串相同,但它们可能不是二进制格式...
你知道那个问题吗?
您正在使用指向 char(不是 c 字符串)的指针作为键。而指针实际上是内存中的一个地址,所以当你执行
(*mymap)["key"]
字符串文字 "key" 将作为包含四个元素的数组放置在堆栈顶部。由于您的键是 pointe,因此第一个元素的地址将传递给运算符括号。该值与您之前存储为键的值没有任何共同之处,并且将为堆栈上的该指针创建一个新值,它将是一个空指针。
下面是简单比较 C 字符串时发生的情况
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 并弄清楚指针是如何工作的。
我有一个很奇怪的问题:
我正在阅读 xml 文件并将所有 attribute/value 放入 map<const char*, const char*> myMap
中作为 key/value。
我的问题是我可以通过迭代器访问和打印所有 keys/values,但我无法直接访问它 (*mymap)["key"]
:程序在 运行.
更奇怪的是:我可以添加一个已经在地图中的键,当我遍历地图并打印它时,我可以看到两个具有不同值的相同键!
我的猜测是我的 xml 文件的字符串格式可能与通常的格式略有不同,因此键看起来与字符串相同,但它们可能不是二进制格式...
你知道那个问题吗?
您正在使用指向 char(不是 c 字符串)的指针作为键。而指针实际上是内存中的一个地址,所以当你执行
(*mymap)["key"]
字符串文字 "key" 将作为包含四个元素的数组放置在堆栈顶部。由于您的键是 pointe,因此第一个元素的地址将传递给运算符括号。该值与您之前存储为键的值没有任何共同之处,并且将为堆栈上的该指针创建一个新值,它将是一个空指针。
下面是简单比较 C 字符串时发生的情况
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 并弄清楚指针是如何工作的。