使用 const char* 键映射 C++ 检索空值
map c++ with const char* keys retrieves null
所以,我正在尝试用C++学习map
。我将类型作为变量month
std:: map <const char *, int>
。比如说,数据是month["Jul"] = 7;
当我尝试直接检索值时
printf("%d", month["Jul"]);
它成功并输出值。
7
尝试使用另一个变量也会成功。
const char *p = "Jul";
printf("%d", month[p]); // 7
但是当我尝试用给定的输入分配它时,会发生奇怪的行为。
const char in_month[3];
scanf("%s", in_month);
print("%d". month[in_month]);
它检索(null)
0
是我在这里做了什么被禁止的事情,还是我错过了一步?
当你使用const char*
作为键时,std::map
将直接在指针上进行比较,但不会比较指针指向的内容。对于 c 样式的字符串文本,可以将相同的字符串文本进行比较为相等,但这不能保证。
允许(但不是必需(编译器为相等或重叠的字符串文本组合存储。这意味着,当通过指针进行比较时,相同的字符串文本可能会也可能不会相等。
当你使用数组in_month
时,转换为指针后它指向不同的东西,那么指针比较结果是false
。
最好将std::string
用作std:: map <std::string, int>
。std::string
具有定义良好的比较运算符,该运算符基于字符串的内容进行比较。
相关文章:
- 使用VerQueryValue检索应用程序的文件描述
- 是否可以从格式字符串中检索"width"
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 如何在QByteArray中放置和检索位字段而不会感到痛苦?
- 如何在Qt中从数据库中检索二进制数据?
- 如何从C++代码中检索 QML 的文本字段中的文本?
- 从 opencv c++ 中的矢量中检索固定的帧数
- 如何在不等待检索的情况下获取C++中的内存位置?
- 如何在 QTreeWidget 中检索特定项目的 mimeData?
- C++从字符串中检索几行
- 在数据库中插入和检索矩阵
- 两个垫子的 OpenCV 数据是相同的,但使用 Mat::at 检索时的值已损坏
- 使用 const char* 键映射 C++ 检索空值
- 打印从SQLite3数据库检索的数据C++与命令行中相同的方式
- 如何检索指向在单独线程上运行的函数的移动指针?
- 如何检索 Steamwork SDK 的当前版本
- 通过 host() 从 af::array 检索数据会导致错误的数据
- 无法从类中检索值
- 初始化类中的指针数组,并在另一个类中检索它
- 如何在 Linux 中务实地检索连接的接入点信息