2017-10-10 4 views
0

Ich versuche, eine Datei aus einem Verzeichnis zu bekommen und im Speicher zu behalten, ist das Ziel, dann Informationen aus der Dateistruktur nach Struktur in eine tmp-Datei zu kopieren, einige zu tun Bearbeiten, dann speichern Sie die neue Information in einer neuen Datei. Alles, was ich gerade versuche, ist, die Datei zu holen und dann auszudrucken.Drucken von einer Datei in c ist völlig falsch

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 

typedef struct hw5_struct { 
    char f_name[12]; 
    char l_name[12]; 
    int age; 
    float height; 
}HW5_struct; 

void printThisFile(FILE *data); 

int main(int argc, char *argv[]) { 
    const char *fileLocation = argv[1]; 

    FILE *originalData = fopen(fileLocation, "r"); 

    if(access(fileLocation, F_OK) != -1) 
     printf("The file at %s exists\n", argv[1]); 

    printThisFile(originalData); 

    //int sizeOfOriginalData = sizeOf(&originalData); 

} 

void printThisFile(FILE *data) { 
    printf("printThisFile called\n"); 

    int c; 
    if (data) { 
     printf("printing file contents now:\n"); 
     while((c = getc(data)) != EOF) 
      printf("%c", c); 
     fclose(data); 
    } 
} 

Er druckt die folgenden:

FredHutcheson À@LarryStarchÍ̼@LucyLu-FredFlintstone 33£@BarnyRubbleÍÌ[email protected]³@RobertHenderson7ffÆ@BobbyNLMcÍ̼@BettyDurnanJPBFloodProfÀ@ 

Ich weiß nicht wirklich, was es soll, wie genau aussehen, aber seine definitiv nicht.

+0

Kompilieren Sie mit allen Warnungen und Debug-Informationen (so 'gcc -Wall -Wextra -g' mit [GCC] (http://gcc.gnu.org/) .....). Dann ** benutze den Debugger ** 'gdb'; Verwenden Sie auch ein oktales oder hexa dump Dienstprogramm, um den Inhalt der Datei zu verstehen, z. [od] (http://man7.org/linux/man-pages/man1/od.1.html) –

+1

Auf den ersten Blick sieht Ihre Ausgabe mit Ihrem impliziten Dateiformat kompatibel aus. –

+1

Die Verwendung von 'access()' ist meist sinnlos. Wenn Sie es benutzen wollen, rufen Sie es an, bevor Sie 'fopen()' aufrufen, aber Sie sollten nicht stören. Sie sollten überprüfen, dass die Datei in der Funktion geöffnet wurde, die 'fopen()' aufruft, nicht die aufgerufene Funktion. Wenn Sie nicht wissen, was in der Datendatei enthalten sein soll, wie können wir Ihnen helfen? Vielleicht müssen Sie das Programm zeigen, das diese Datensätze in die Datei geschrieben hat. Du hast 'fwrite()' benutzt, oder? Warum nicht 'fread()' verwenden, um die Datensätze zurück zu lesen? –

Antwort

1

Dies würde Sinn machen, wenn was auch immer geschrieben, dass Datei Binärversionen von hw5_struct

schrieb Wenn das der Fall, dass Sie die Datei laden müssen, indem die entsprechende binäre tun lesen

FILE *originalData = fopen(fileLocation, "rb");

HW5_struct tempStruct;

fread (&tempStruct, sizeof(hw5_struct),1, data);

Sie können es dann auseinander nehmen, indem Sie die Bits drucken.

printf("%s %s %d %f\n", tempStruct.f_name, tempStruct.l_name,tempStruct.age, tempStruct.height);

Ihr aktueller Code gelesen wird nur mit einer Textdatei arbeiten.

+0

Ich bin sehr neu in C und das hat mir sehr geholfen und mein Problem behoben, danke! –

+0

Gute Sachen. C ist schwierig. Eine großartige Basis, aber die meisten dieser Verrücktheiten gehen weg (oder zumindest ändert sich ein bisschen!), Wenn Sie zu mehr zeitgenössischen Sprachen wechseln. Fühlen Sie sich frei, die Antwort zu akzeptieren und geben Sie den Ruf ich sehne :) – LoztInSpace

Verwandte Themen