2017-02-27 2 views
0

Ich habe eine Textdatei in diesem Format mit Daten gefüllt bekommen (es ist die Ausgabe von 3D-Grafik-Editor .vox-Format) ...Des Versuch, eine Datei in ein Array zu analysieren, aber zusätzliche Ziffern

6 -13 8 eeeeec 
13 -13 8 eeeeec 
6 -12 8 eeeeec 
6 -11 8 eeeeec 
6 -10 8 eeeeec 
1 -9 8 eeeeec 
2 -9 8 eeeeec 
3 -9 8 eeeeec 

und ich verwende den folgenden Code, um die ganzen Zahlen in ein Array zu analysieren ...

#include<stdio.h> 

int array[10000]; 
char *p; 

    int main() 
    { 
      FILE *ptr_file; 
      char buf[10]; 

      ptr_file =fopen("AntAttackMap.txt","r"); 
      if (!ptr_file) 
       return 1; 

      long index = 0; 

      while (fgets(buf,10, ptr_file)!=NULL) 
      { 
       p = strtok(buf, " ec"); 

       while (p != NULL) 
       { 

       int num = atoi(p); 
       array[index]=num; 
       printf ("%d ",num); 
       p = strtok (NULL, " ec"); 
       if (p != NULL) index++; 
       } 
      } 

     fclose(ptr_file); 
     printf("TOTAL %d, ",index); 
      return 0; 
    } 

jedoch der Ausgang zusätzliche Nullen hat sich zwischen den drei Ziffern wie folgt:

6 -13 8 0 13 -13 8 0 6 -12 8 0 6 -11 8 0 6 -10 8 0 1 -9 8 0 2 -9 8 0 3 -9 8 0 

Kann mir bitte jemand erklären, warum ich die zusätzlichen Ziffern bekomme?

Vielen Dank im Voraus,

Mike

+3

'" ec "' -> '" ec \ n "' – BLUEPIXY

+2

Ihre Puffergröße von '10' ist nicht groß genug, um' 13 -13 8 eeeeec' zu speichern. Verwenden Sie eine vernünftige Größe - vielleicht 4096 oder vielleicht nur 1024 oder 256. –

+0

Dank BLUEPIXY war das, was das Problem war. –

Antwort

0

Sie BUFSIZ Konstante, Beispiel

char buf[BUFSIZ]; 
0

Verwenden atoi nicht für das Parsen von ganzen Zahlen verwenden können. Der einzige zuverlässige Weg ist strtoul. Fügen Sie dann dem Code eine Fehlerüberprüfung hinzu, und Sie sollten in Ordnung sein.

Verwandte Themen