如何用cpp中的地图内容覆盖文件

时间:2015-05-12 16:14:47

标签: c++ file containers fwrite

我正在尝试用地图内容覆盖我的文本文件,任何人都可以给我这个想法 直到现在我做了

#include <string.h>
#include <iostream>
#include <map>
#include <utility>
using namespace std;

int main()
{
    map<int, string> mymap;

    mymap[34] = "hero";
    mymap[74] = "Clarie";
    mymap[13] = "Devil";

    for( map<int,string>::iterator i=mymap.begin(); i!=mymap.end(); ++i)
    {
        cout << (*i).first << ":" << (*i).second << endl;
    }

    // write the map contents to file .
    // mymap &Emp;
    FILE *fp;
    fp=fopen("bigfile.txt","w");
    if(fp!=NULL)
    {
        for(map<int,string>::iterator it =mymap.begin();it!=mymap.end();++it)
        {
            fwrite(&mymap,1,sizeof(&mymap),fp);
        }
        fclose(fp);
    }
}

我是容器的新手。我在正确的程序中,并在将地图内容写入文件时,它正在给我文件中的垃圾内容。 提前谢谢

1 个答案:

答案 0 :(得分:3)

您的问题:

您对fwrite()的来电非常糟糕。

int会将一系列字节写入给定文件。例如,如果我们想在文件中写一个int x = 10; char text[10]; snprintf(text, 10, "%d", x); fwrite(text, 1, strlen(text), fp); ,我们需要做类似的事情:

std::string

对于std::string y = "Hello"; fwrite(y.c_str(), 1, y.size(), fp); ,我们需要执行以下操作:

fprintf()

或者,您可以使用int x = 10; std::string y = "Hello"; fprintf(fp, "%d:%s\n", x, y.c_str());

std::cout

让我们使用C ++工具代替C工具:

如果我们使用C ++&#39; std::ofstream,那么事情就会简单得多。实际上,代码看起来与我们使用#include <cassert> #include <fstream> #include <iostream> #include <map> #include <string> #include <utility> using namespace std; int main() { map<int, string> mymap; mymap[34] = "hero"; mymap[74] = "Clarie"; mymap[13] = "Devil"; for(map<int,string>::iterator i=mymap.begin(); i!=mymap.end(); ++i) cout << i->first << ":" << i->second << "\n"; // write the map contents to file. std::ofstream output("bigfile.txt"); assert(output.good()); for(map<int,string>::iterator it =mymap.begin();it!=mymap.end();++it) output << it->first << ":" << it->second << "\n"; } 的方式几乎相同。

bigfile.txt

这将输出到屏幕并写入13:Devil 34:hero 74:Clarie 这个:

Savesnap