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

时间:2015-05-08 21:59:25

标签: c++ string binary

我在使用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] = '\0';
    heure = temp;
    delete [] temp;
}

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

非常感谢。

1 个答案:

答案 0 :(得分:0)

在分配

时,第一眼看上去的读写似乎是正确的
heure = temp;

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

你必须使用

strcpy(heure, temp);

将每个字节从temp复制到由heure分配的内存中。确保heure已经分配了足够的空间来容纳temp的所有字节。