2016-06-27 23 views
0

Ich lese eine Datei auf Linux und Windows, auf Linux alle arbeiten ziemlich gut, aber auf Windows, die fread(r_hash, 1, 64 , f); wird 64 char in r_hash dann 32 Char von Junk, und ich verstehe nicht Warum. Hier ist mein Code Danke!Freed Füllpuffer mit Junk

int status; 
FILE *f; 
char *path; 
char ln[64]; 
char *r_hash = calloc(64, 1); 
path = malloc(1024); 
path = strcpy(path, "some path"); 
status = -1; 

f = fopen(path, "rb"); 

if (!f) 
    return -1; 

while (fscanf(f, "%s ", ln)!=EOF) 
{ 
    fread(r_hash, 1, 64 , f); 
    if(strcmp(w_hash, r_hash) == 0 && strcmp(hostname, ln) == 0) 
    { 
     status = 0; 
     break; 
    } 
} 

fclose(f); 
+0

Was Datei nicht Ihre Eingabe aussehen? –

+0

so etwas wie: 'Benutzername someStringHashedAlways64CharLong' – richerarc

+3

Ich vermute, es gibt kein Nullzeichen in den Daten, die Sie aus der Datei lesen ... – Dmitri

Antwort

1

r_hash = calloc(68, 1); // anything more than 64

+2

Dies funktioniert nur, wenn Sie sicher sind, die gleiche Anzahl von Bytes in jedem Aufruf von 'fread' zu lesen. Wenn ein nachfolgender Aufruf weniger Bytes liest, haben Sie "Junk" übrig von dem vorherigen Aufruf. Versuchen Sie es mit einer Datei, in der die zweite Zeile einen Hashwert hat, der kleiner als 64 Byte ist und sehen Sie, was gedruckt wird :-). –

+1

Ja, aber ich erzeuge die Datei, so dass es auf diese Weise "sicher" für meinen Zweck gelesen wird – richerarc