在二进制文件中读写字符串 [英] read and write string in binary file
本文介绍了在二进制文件中读写字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我编写这个程序用于学习写入和读取二进制文件中的字符串。
I write this program for learning write and read string in binary file.
// testtest.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main( )
{
string str1 = "abababab";
string str2 = "wjwjwjwjwjwj";
string str3 = "vivivivivivivivi";
int size1 = (str1.size());
int size2 = (str2.size());
int size3 = (str3.size());
ofstream output ("output.txt", ios::out | ios::binary);
if (!output)
{
cout << "can't open file" << endl;
exit(1);
}
output.write(reinterpret_cast<char *>(&size1), sizeof(int));
output.write(str1.c_str(), size1);
output.write(reinterpret_cast<char *>(&size2), sizeof(int));
output.write(str2.c_str(), size2);
output.write(reinterpret_cast<char *>(&size3), sizeof(int));
output.write(str3.c_str(), size3);
str1 = str2 = str3 = "";
size1 = size2 = size3 = 0;
output.flush();
output.close();
//=======================================================================
ifstream input("output.txt", ios::in | ios::binary);
if (!output)
{
cout << "can't open file" << endl;
exit(1);
}
input.read(reinterpret_cast<char *>(&size1), sizeof(int));
input.read(reinterpret_cast<char *>(&str1), size1);
input.read(reinterpret_cast<char *>(&size2), sizeof(int));
input.read(reinterpret_cast<char *>(&str2), size2);
input.read(reinterpret_cast<char *>(&size3), sizeof(int));
input.read(reinterpret_cast<char *>(&str3), size3);
cout << str1 << endl << str2 << endl << str3 << endl << endl;
return 0;
}
程序正确读取str1和str2但无法读取str3。 visual c ++在调试程序时返回这些消息:
testtest.exe中0x51EDA9E8(msvcr120d.dll)的未处理异常:0xC0000005:访问冲突读取位置0x6976696A。
和
str3:读取字符串
program read str1 and str2 correctly but can't read str3 . visual c++ return these messages when I debug program:
Unhandled exception at 0x51EDA9E8 (msvcr120d.dll) in testtest.exe: 0xC0000005: Access violation reading location 0x6976696A.
and
str3: Error reading characters of string
推荐答案
我解决了它
I solve it
// testtest.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main( )
{
char *buf;
string str1 = "abababab";
string str2 = "wjwjwjwjwjwj";
string str3 = "vivivivivivivivi";
int size1 = (str1.size());
int size2 = (str2.size());
int size3 = (str3.size());
ofstream output ("output.txt", ios::out | ios::binary);
if (!output)
{
cout << "can't open file" << endl;
exit(1);
}
output.write(reinterpret_cast<char *>(&size1), sizeof(int));
output.write(str1.c_str(), size1);
output.write(reinterpret_cast<char *>(&size2), sizeof(int));
output.write(str2.c_str(), size2);
output.write(reinterpret_cast<char *>(&size3), sizeof(int));
output.write(str3.c_str(), size3);
str1 = str2 = str3 = "";
size1 = size2 = size3 = 0;
output.flush();
output.close();
//=======================================================================
ifstream input("output.txt", ios::in | ios::binary);
if (!output)
{
cout << "can't open file" << endl;
exit(1);
}
input.read(reinterpret_cast<char *>(&size1), sizeof(int));
buf = new char[size1];
input.read( buf, size1);
str1 = "";
str1.append(buf, size1);
input.read(reinterpret_cast<char *>(&size2), sizeof(int));
buf = new char[size2];
input.read(buf, size2);
str2 = "";
str2.append(buf, size2);
input.read(reinterpret_cast<char *>(&size3), sizeof(int));
buf = new char[size3];
input.read(buf, size3);
str3 = "";
str3.append(buf, size3);
cout << str1 << endl << str2 << endl << str3 << endl << endl;
return 0;
}
这篇关于在二进制文件中读写字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文