更改二进制文件中的字符串

时间:2015-01-25 05:50:25

标签: c++

我正在制作一个系统,您可以在其中添加公寓的详细信息,然后客户将能够查看列表并预订任何列表。因此,我必须定义一种方法来使预订的公寓不可用,我已经定义了一个生成随机数的函数,并且我添加了一个值为'可用的字符串'因此,每次将记录保存到文件中,在id旁边,您都可以看到可用的字符串,如下所示:

    string available = "  : available";

    cout << "Auto-Generated ID:" << randomNum() << endl << endl;
    auto_id = to_string(randomNum()) + available;

到目前为止,这个工作完全正常,但另一方面,当用户预订公寓时,我已经定义了另一个应该通过同一个文件的功能,并将其更改为不可用,以及我&# 39; ve定义了一个名为unavailable的字符串,其值为&#39;不可用&#39;和这样的替换字符串函数:

    void change_status(string available, string unavailable) {
    std::ifstream ifile("apartment.txt", std::ios::binary | ios::app);
    ifile.seekg(0, std::ios_base::end);
    long s = ifile.tellg();
    char *buffer = new char[s];
    ifile.seekg(0);
    ifile.read(buffer, s);
    ifile.close();
    std::string txt(buffer, s);
    delete[] buffer;
    size_t off = 0;
    while ((off = txt.find(available, off)) != std::string::npos)
        txt.replace(off, sizeof(available)-1, unavailable);
    std::ofstream ofile("apartment.txt");
    ofile.write(txt.c_str(), txt.size());

    }

这就是我调用函数的方式;

        string unavailable = "  : unavailable"; 

        cout << "Enter In Apartment ID" << endl;

        cin >> booker_apartment_id;

        serachi = to_string(booker_apartment_id) + unavailable;

        change_status(auto_id, serachi);

但是当功能完成后,我尝试显示数据以检查它是否已更改为不可用,最终会出现此错误;

       Unhandled exception at 0x0FCB7EA6 (msvcp120d.dll) in Assignment.exe: 0xC0000005: Access violation reading location 0x006FEF28.

我是业余爱好者,这是我在c ++中的第二个项目,任何帮助解决这个问题,或任何建议的做这种事情的方法,都非常感激。

编辑:这是我的调试器所指的地方;

        if (_State == ios_base::goodbit
        && _Ostr.rdbuf()->sputn(_Str.c_str(), (streamsize)_Size)
        != (streamsize)_Size)  // an arrow appears next to this line after breaking.... 
        _State |= ios_base::badbit;
        else
        for (; 0 < _Pad; --_Pad)    // pad on right
        if (_Traits::eq_int_type(_Traits::eof(),
        _Ostr.rdbuf()->sputc(_Ostr.fill())))
        {   // insertion failed, quit
        _State |= ios_base::badbit;
        break;
        }
       _Ostr.width(0);
       _CATCH_IO_(_Ostr)
        }

0 个答案:

没有答案