将地图 <string,int> 保存到文本文件

Saving map<string,int> to text file

我有一个字符串 int 映射,我想将它保存到一个 txt 文件中。我已经有一段时间没有使用 c++ 了,我对指针之类的东西一头雾水。

int WriteFile(string fname, map<string, int>* m) {
    int count = 0;
    if (m->empty())
        return 0;

    FILE* fp = fopen(fname.c_str(), "w");
    if (!fp)
        return -errno;

    for (map<string, int>::iterator it = m->begin(); it != m->end(); it++) {
        fprintf(fp, "%s=%s\n", it->first.c_str(), &it->second);
        count++;
    }

    fclose(fp);
    return count;
}

问题是整数被写成垃圾字符。

%s 用于打印字符串,您通过将错误类型的数据传递给 fprintf().

来调用 未定义的行为

您应该使用格式 %d 来打印 int

fprintf(fp, "%s=%d\n", it->first.c_str(), it->second);
#include<map>
#include<fstream>
#include<iostream>

using namespace std;

int WriteFile(string fname, map<string, int> &m) {
    
    if (m.empty()) return 0;
    
    ofstream fout;
    fout.open(fname);
    
    if(!fout) return -errno;
    
    int count = 0;
    for (auto it = m.begin(); it != m.end(); it++) {
        fout<<it->first<<" = "<<it->second<<"\n";
        count++;
    }

    fout.close();
    return count;
}

int main()
{
    map<string, int> m;
    m["Hi there"]=1;
    m["How are you"]=-7;
    m["I am fine"]=-9;
    m["Yo"]=15;
    m["Code"]=2;
    
    
    WriteFile("testing", m);
    return 0;
}

您确实需要使用指针符号来通过引用传递。您只需在函数参数

中将 & 添加到 m 即可轻松做到这一点