2017-02-27 46 views
0

我有充分數據的文本文件格式(這是從一個三維圖形編輯器.vox格式輸出)...試圖文件解析到一個數組,但得到額外的數字

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 

和我使用下面的代碼整數解析到一個數組...

#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; 
    } 

然而,輸出具有額外的零的在中間的3個數字如下:

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 

有人可以請解釋爲什麼我收到了額外的數字嗎?

由於提前,

邁克

+3

' 「EC 」' - >'「 EC \ N」 的'' – BLUEPIXY

+2

你的緩衝區大小10'是不是大到足以容納'13 -13 8 eeeeec'。使用一個合理的規模 - 也許4096,或者只是1024,或256 –

+0

感謝BLUEPIXY這是什麼問題了。 –

回答

0

您可以使用BUFSIZ不變, 例

char buf[BUFSIZ]; 
0

不要解析整數使用atoi。唯一可靠的方法是strtoul。然後,添加錯誤檢查到代碼,你應該沒問題。

相關問題