1
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include "ReadText.h"
using namespace std;

const string FILE_NAME = "TopicIinBasic.txt";

template<typename T>
char * as_bytes( T &inType );


int main()
{
    vector<int> vec(2, 2);

    vector<int> receive(2);

    fstream write( "myFile.dat", ios::out | ios::binary );

    write.write( as_bytes(vec[0]), sizeof(vec[0] * 2) );

    write.close();

    fstream read( "myFile.dat", ios::in | ios::binary );

    read.read( as_bytes(receive[0]), sizeof(vec[0] * 2) );

    cout << receive[0] << ' ' << receive[1] << endl;    

    return 0;
}

template<typename T>
char * as_bytes( T &inType )
{
    void* addr = &inType;

    return static_cast<char*>(addr);
}

vec最初に の内容をバイナリ ファイルに書き込みます。次に、ファイルを閉じます。次に、読み取りモードで再度開きます。次に、バイナリ ファイルの内容をreceive. しかし、receiveの内容を表示すると、出力は2 0ではなく2 2です。なぜこうなった?

ありがとう。

4

1 に答える 1

3

式のサイズを取得しています。vec[0] * 2これは、と同じサイズvec[0]です。結果として、あなたはただ一つの要素を書いているのです!

* 2括弧の外側を移動すると修正されます。(わかりやすくするために、前に移動しました。)

write.write( as_bytes(vec[0]), 2 * sizeof(vec[0]) );
于 2012-05-05T00:57:09.213 に答える