C++ 将映射保存到文本文件

C++ 将映射保存到文本文件,c++,string,visual-studio,dictionary,fopen,C++,String,Visual Studio,Dictionary,Fopen,我有一个字符串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 -

我有一个字符串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;
}
问题是INT被写为垃圾字符。

%s用于打印字符串,您通过将错误类型的数据传递给fprintf调用了未定义的行为

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

%s用于打印字符串,您通过将类型错误的数据传递给fprintf调用了未定义的行为

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

您确实需要使用指针表示法来通过引用进行传递。只需将&in函数参数添加到m中,即可轻松完成此操作


您确实需要使用指针表示法来通过引用进行传递。您只需在函数参数中添加&m即可轻松实现这一点。

aha,我知道我已经接近了,谢谢。我试过用“n”代替“s”,没有看到“d”。啊哈,我知道我很接近了,谢谢。我试过用“n”代替“s”,但没有看到“d”。
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;
}