2017-11-07 1 views
0

Ich habe eine .map-Datei, die einige Daten von struct enthalten, die ich möchte. Beispiel für die Eingabe in der Map-Datei. .?Abrufen von Daten aus der .map-Datei

ay ~ ÷> ÷> + .ØæK L ÷> C. Db 'ZLE)/@ ø> ay ~ ÷> € +/Ü ÷> €; -. ¥ ÚkmþÿÿÿÐB.yH @ ø> ƒ @ € ÷>

struct student { 
char *id; 
char name[20]; 
int age; 

};

int main() { 
char * buffer; 
FILE *fptr; 
struct student stud[100]; 

fptr = fopen("input.map", "wb+"); 
fread(stud, sizeof(stud), 1, fptr); 
for (int i = 0; stud[i].id != NULL; ++i) 
{ 
    printf("Name: %s \n", stud[i].name); 
    printf("Age: %s", stud[i].age); 
} 
fclose(fptr); 

system("pause"); 

}

jedoch die Ausgabe eine Reihe dieser Zeichen sind die Namen für den Druck ... ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠

zum Drucken des Alters des Schülers -858993460 -858993460 -1533994631 ich weiß nicht, was falsch gelaufen ist.

Bitte korrigieren Sie mich, wenn ich in die falsche Richtung bin. Sehr neu in dieser Sprache. Danke im Voraus.

+2

Sie können Zeiger in einer Datei nicht speichern. Ein Zeiger ist nur innerhalb eines einzelnen Prozesses gültig. –

+2

Sie verwenden auch ['fred'] (http://en.cppreference.com/w/c/io/fread) nicht korrekt. Sie sollten z.B. 'fread (Stud, sizeof (struct Schüler), 100, fptr)'. *** Und *** du solltest überprüfen, was 'fread' * zurückgibt * (sowie natürlich die Funktion' fopen'). –

+0

das [manual für fopen] (http://www.cplusplus.com/reference/cstdio/fopen/) gibt an, dass "w +" * schreiben/aktualisieren: Erstellen Sie eine leere Datei und öffnen Sie sie für die Aktualisierung (sowohl für die Eingabe und Ausgabe). Wenn bereits eine ** Datei mit demselben Namen existiert, wird ihr Inhalt verworfen ** und die Datei wird als neue leere Datei behandelt. * – sp2danny

Antwort

1

Da Ihre Eingabe scheint nichts lesbares darin zu haben, ich denke, Sie müssen mit der Validierung beginnen, wie Sie Ihre Datei schreiben.

Wenn Sie fwrite verwenden, um Ihre struct student auszugeben, wird der direkte Inhalt des Speichers in Datei ausgegeben. Der Zeiger char * wird als Zeigerwert ausgegeben (die Länge hängt von Ihren Systemdetails ab), das feste Array char ...[20] sollte unverändert ausgegeben werden, ebenso die Ganzzahl.

Sie können die Zeichenfolge char * in der Datei ausgeben. Stellen Sie jedoch sicher, dass das Trennzeichen Null, das das Ende der Zeichenfolge angibt, enthalten ist.

Da die Länge von char * Inhalt variieren kann, können Sie nicht den Inhalt mit einem einfachen fread mit einer Struktur einlesen. Lesen Sie die Zeichenfolge und lesen Sie Feld für Feld entsprechend ihrem Typ.

Alternativ können Sie Ihre Daten reorganisieren.

Bei der Ausgabe und Eingabe von Binärdaten kann es sehr hilfreich sein, ein einfaches Beispiel zu verwenden und sie mit einem Hex-Editor oder Hex-Dump zu untersuchen. Wenn Sie auch einen Hex-Dump Ihrer Daten anstelle einer Zeichenfolge verwenden, können Sie genauere Antworten befürworten.