#include<iostream>
#include<map>
#include<string>
using namespace std;
int main()
{
int m;
map<const char*, int> mm;
FILE *fp = fopen("input.txt", "r");
fscanf(fp, "%d", &m);
for(int i = 0; i < m; i++){
char name[10];
int duration;
fscanf(fp, "%s %d", name, &duration);
// mm.insert(pair<string, int>(name, duration));
mm[name] = duration;
}
printf("%d\n", mm.size());
}
结果是无论文件中有多少条记录,最后的输出 map 的大小一直是 1。
这是因为 map 中存放的是 const char* 指针,而非字符串。调试时发现每次循环时 name 的首地址都是一样的,也就是说,虽然指针指向的内容每次都不同,但指针从未改变。因此,map 里最终只存放了一个指针,而这个指针指向的内容就是最后一条数据!
解决办法就是把 const char* 改为 string。
map<string, int> mm;
版权声明:本文为weixin_43742643原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。