C++ 将映射保存到文本文件
我有一个字符串int映射,我想将其保存为txt。我在一段时间内没有使用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 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;
}