尝试将文件解析为数组但获取额外数字

时间:2017-02-27 20:06:30

标签: c arrays string parsing strtok

我有一个充满这种格式数据的文本文件(这是3D图形编辑器.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

有人可以解释为什么我会得到额外的数字吗?

提前致谢,

麦克

2 个答案:

答案 0 :(得分:0)

你可以使用BUFSIZ常数, 实施例

char buf[BUFSIZ];

答案 1 :(得分:0)

不要使用atoi来解析整数。唯一可靠的方法是strtoul。然后,在代码中添加错误检查,你应该没问题。