2016-04-24 20 views
-2

私はいくつかのFortranコードで作成されたバイナリファイルを持っています。私は、このバイナリファイルを読み込み、std :: coutを通して吐き出すためのC++コードを書いてみたいと思います。ここに私のコードは、これまでのところです:コンパイルと実行したときに単純なC++バイナリファイルの読み込み

#include<fstream> 
    #include<iostream> 

using namespace std; 

int main(){ 
    ifstream file("tofu.txt", ios::binary | ios::in | ios::ate); 
    ifstream::pos_type size; 
    if(file.is_open()){ 
    size = file.tellg(); 
    cout << "size = " << size << '\n'; 
    file.seekg(0); 
    char bar[500]; 
    file.read((char*) (&bar), size); 
    file.close(); 
    string foo(bar); 
    cout << "foo = " << foo << '\n'; 
    } 
    else cout << "Unable to open file"; 
    return 0; 
} 

はしかし、コードは私に何も与えない:

size = 250 
foo = 

私はコードで間違ってやっているところ誰かが私に教えてもらえますか?ありがとう!

+2

bar' 'の内容がないので、あなたのコードは未定義の動作をしている(あなたはsizeがあまりにも、あなたがのためのスペースを持っているよりも大きくないことを確認してください!)ヌルで終了する文字列を形成します。 –

+0

ファイルには何が含まれていますか?たとえば、最初のバイトがゼロの場合、正常に動作します。 –

+0

@KerrekSB:良いキャッチ。 'char bar [500] = {0};' –

答えて

0

文字配列を終了するのを忘れて、定義されていない動作につながります。このようにそれを修正:

char bar[500]; 
assert(size < 500); 
file.read((char*) (&bar), size - 1); 
bar[size] = '\0'; 

関連する問題