yau_song 2021-06-05 10:02 采纳率: 88.9%
浏览 64
已采纳

二进制读取文件访问权限冲突咋

在devc++中运行二进制文件没有报错只是控制台程序空白,

在vs二进制读文件的时候出现了访问权限冲突,但是成功读取了内容,这是咋回事?

//二进制写文件
#include <iostream>
#include <string> 
using namespace std;
#include <fstream>
class Person
{
public:
string m_Name;//性别 
int m_Age; //年龄 
};
void test0()
{
	ofstream ofs;
	ofs.open("Person.txt",ios::out|ios::binary);
	Person p;
	p.m_Name="佳莹";
	p.m_Age=18;
	ofs.write((const char *)&p,sizeof(p));
	ofs.close();
}
int main()
{
	test0();
	return 0;
}
//二进制读文件
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
class Person
{
public:
	string m_Name;
	int m_Age;

};
void test0()
{
	ifstream ifs;
	ifs.open("Person.txt", ios::in | ios::binary);
	if (!ifs.is_open())
	{
		cout << "文件打开失败" << endl;
		return;
	}
	//	cout<<"test";
	Person p;
	ifs.read((char *)&p, sizeof(p));

	cout << p.m_Name << " " << p.m_Age << endl;
	ifs.close();
}
int main()
{
	test0();
	return 0;
}
  • 写回答

3条回答 默认 最新

  • qfl_sdu 2021-06-05 10:19
    关注

    写文件的时候,要自己把p转成字符串,因为在类中有string这种不定长的类型,编译器不知道怎么转换。所以在写文件前,需要把p的内容存在一个buf[]中,然后把buf[]写入文件,或者一个元素一个元素去写,读取的时候按照写入的方式读出来就是了。

    ofs.write((const char *)&p,sizeof(p));改成:

    char buf[1024]={0};
    sprintf(buf,"%s,%d",p.m_Name.c_str(),p.m_Age);
    ofs.write(buf,strlen(buf));
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?