2016-03-21 12 views
0

Hey Jungs so bin ich stecken, wie in ASCII-Zeichen in ein Array aus einer Datei zu lesen und scannen. Die Datei besteht aus ASCII-Daten unterschiedlicher Länge bis zu 512 Bytes.Lesen in ASCII-Zeichen aus einer Datei in ein Array

Ich weiß, ich muß dynamisch Speicher zuweisen, aber nicht sicher, wie groß ich soll es machen, um in der Datei zu lesen und wie sie wissen lassen, dass es EOF

Ein Beispiel für eine Eingabedatei erreicht ist:

abcdefghijklmnopqrstuvwxyz12345 

ich dachte, etwas entlang der Linien von:

char* array = malloc(512 * sizeof(char); //but that doesnt seem right, 
do{ 
    c = fgetc(enc) // enc is FILE Ptr 
    array[i++] = c 
    if(feof(enc)) 
     break; 
while(1); 

und dann, wenn ich das Array drucken zurück wollte, wie würde ich durch das Feld bewegen, ohne knowin g die Länge? Ich kann nur daran denken, eine for-Schleife zu verwenden, aber wie würde ich wissen, welche Bedingung es bis dahin laufen lassen?

Vielen Dank für Ihre Hilfe!

+1

Zum Lesen von Dateien verwenden immer ** while ((c = getc (fp))! = EOF) ** –

+0

Beitrag Erklärung 'c' – chux

Antwort

-1

Ich hoffe diese Hilfe. Grundsätzlich verstehe ich aus Ihrer Frage, dass Sie die Datei lesen, im Array speichern und in der Lage sein möchten, dieses Array wie das Zurückschreiben von Werten zu manipulieren.

int main(int argc, char** argv) { 

     FILE* enc = fopen("data","r"); 
     int number=0; 
     char data[80];int i=0; 

     if (! enc) // equivalent to saying if (in_file == NULL) 
     { 
      printf("oops, file can't be read\n"); 
      exit(-1); 
     } 

     while (fscanf(enc, "%c", & number) == 1) 
     { 

      data[i] = number; 
       i++; 
      //printf("We just read %c\n", data[i]); 

     } 

    int j=0; 

    while(data[j]!=NULL) 
    { 
     printf("%c", data[j]); 
     j++; 
    } 
    return (0); 
} 
+1

Danke, ich habe mich gefragt, wie Sie bekam char [80] ? Uns wird gesagt, dass die maximale Dateigröße 512 Bytes betragen würde (aber es könnte weniger sein), entspricht das einer Länge von 80? und würde ich die Größe des Arrays herausfinden, wenn es weniger als 512 Bytes ist? – Kris

+0

Es ist nur eine Vermutung, aber nicht blind geraten. 80 ist eine Standard-Array-Größe in einer solchen Art von Array. In diesem Fall hat es nämlich nichts mit der Speichergröße zu tun, die Sie in der Frage angegeben haben. – denis

+0

1) 'Int-Nummer = 0; ... while (fscanf (enc, "% c", & number) 'falscher Spezifizierer für den Variablentyp. 2) Keine Verhinderung des Überlaufs von' data [] '. 3) 'while (data [j]! = NULL)' darf niemals falsch sein vor 'j> = 80'. – chux