KGLL 2020-06-13 10:20 采纳率: 100%
浏览 288
已采纳

C++为什么将含有string类型的数据成员的类对象转换为char*类型会出错?

把string改成char就没问题
头文件

#pragma once
#include<string>
using namespace std;
class Extest {
public :
    Extest();
    void show();
    void input();
private:
    int a;
    int b;
    string c;//char c[20]={'\0'};
};

cpp文件

#include<iostream>
#include<fstream>
using namespace std;

#include "extest.h"
int main()
{
    Extest obj1;
    obj1.input();
    Extest obj2;
    ofstream out("Object.txt", ios_base::out | ios_base::trunc | ios_base::binary);
    if (!out.is_open())
        cout << "FAIL" << endl;
    out.write((const char*)&obj1, sizeof(Extest));
    out.close();

    ifstream in("Object.txt", ios_base::in | ios_base::binary);
    if (!in.is_open())
        cout << "FAIL" << endl;
    while (in.peek() != EOF)
    {
        in.read((char*)&obj2, sizeof(Extest));
    }
    in.close();
    obj2.show();
    return 0;
}
Extest::Extest()
{
    a = 0;
    b = 0;
    c = "NO";//for(int i=0;i<20;i++)c[i]={'\0'};
}

void Extest::show()
{
    cout <<"a:"<< a << endl;
    cout << "b:" << b << endl;
        cout << "c:" << c << endl;
}

void Extest::input()
{
    cin >> a >> b;
    cin>> c;
}

图片说明

请各路大神解答!

  • 写回答

2条回答 默认 最新

  • fengqiao1999 2020-06-13 16:56
    关注

    这里涉及到C++ Pod的问题, std::string 不是一个Pod类型,所以你不能直接二级制memcopy,如果用你注释的是没问题的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝