在二进制文件中读写字符串 [英] read and write string in binary file

查看:111
本文介绍了在二进制文件中读写字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我编写这个程序用于学习写入和读取二进制文件中的字符串。



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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆