2016-04-24 11 views
-2

Ich habe eine Binärdatei von einigen Fortran-Code erstellt. Ich möchte einen C++ Code schreiben, um diese Binärdatei zu lesen und sie dann über std :: cout auszuspucken. Hier ist so weit mein Code:einfache C + + Binärdatei lesen

#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; 
} 

Wenn jedoch kompiliert und ausgeführt, der Code gibt mir nichts:

size = 250 
foo = 

Könnte mir jemand sagen, wo ich in den Code falsch machen werde? Vielen Dank!

+2

Ihr Code Verhalten, weil der Inhalt von 'bar' undefined hat nicht Bilden Sie eine nullterminierte Zeichenfolge. –

+0

Was enthält die Datei? Wenn das erste Byte beispielsweise Null ist, funktioniert es gut. –

+0

@KerrekSB: guter Fang. 'char bar [500];' sollte ersetzt werden durch 'char bar [500] = {0};' –

Antwort

0

Sie haben vergessen, Ihr char-Array zu beenden, was zu undefiniertem Verhalten führt. Fix es wie folgt aus:

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

(! Vergewissern Sie sich, dass size nicht größer ist als Sie Platz haben für, auch)