读取二进制文件中的字符串 C++

Reading string in binary files C++

我在用 C++ 写入和读取二进制文件时遇到了麻烦。 我从堆栈问题中学到了很多东西,但我从来没有让它工作过,我猜问题出在阅读过程中,

读取和保存方法如下:

  void date::save(ofstream& fo){
    fo.write((char *) &jour, sizeof(int));
    fo.write((char *)&moi, sizeof(int));
    fo.write((char *)&annee, sizeof(int));

    size_t len = heure.size();
    fo.write((char *)&len,sizeof(size_t));
    fo.write(heure.c_str(), heure.size());
}

void date::load(ifstream& fi){
    fi.read((char *)&jour, sizeof(int));
    fi.read((char *)&moi, sizeof(int));
    fi.read((char *)&annee, sizeof(int));

    size_t len;
    fi.read((char *)&len, sizeof(size_t));
    char* temp = new char[len+1];
    fi.read(temp, len);
    temp[len] = '[=10=]';
    heure = temp;
    delete [] temp;
}

另外:是否可以使用 ofstream.write() 功能直接保存具有动态属性的 类?

非常感谢。

赋值时,乍一看读写似乎是正确的

heure = temp;

有问题。 你分配 len+1 字节的内存。 temp 指向该内存的开头。 在您分配 (heure = temp) 之后,heure 也指向相同的内存。然后你调用 delete,从那时起,任何其他操作都可以将任何数据写入该内存(称为 'wild pointer')。

你必须使用

strcpy(heure, temp);

将每个字节从temp复制到heure分配的内存中。当然要确保 heure 已经分配了足够的 space 来容纳 temp.

的所有字节