错误数组大小

时间:2011-03-11 08:31:31

标签: c arrays

我需要分配一个包含300000个数据的字符数组,这些数据是从包含以列格式排列的200,000个数字(其庞大的数据文件)的Numbers.dat文件中提取的。操作是从该文件中获取数据并将其存储在300000块的数组中,以便将这300000个数字再次存储在不同的文件中。此操作是针对两个文件执行的,因此这些数据的子集是< / p>

-0.98765
-0.124567

等 但我得到两个错误:首先是语法错误,说数组大小太长而另一个是逻辑错误。如何解决这个问题。该代码由Gunner在How to read blocks of numbers from a text file in C中提供,但在用于此案例时不起作用

#include <stdio.h>
#include<stdlib.h>
# include <conio.h>
# include <dos.h>
# include <math.h>

    void main()
    { FILE *fpt1,*fpt2,*fpt; 
     fp=fopen("numbers.dat","r");
fpt1=fopen("subset1.dat","w");
fpt2=fopen("subset2.dat","w");

int index=0;
char anum[300000]; //this is the reason for the first syntactic error :Array size too large

             // since we are not calculating, we can store numbers as string
            while( fscanf(fp,"%s",anum) == 1 )
            {
                 if(index==0)
                 {
            // select proper output file based on index.
             fprintf(fpt1,"%s",anum);
                 index++; }
                 if(index ==300000)
                 {
                 fprintf(fpt2,"%s",anum);
                 index++; }

             }

fclose(fp);
fclose(fpt1);
fclose(fpt2);
}

逻辑错误是,即使我将大小减小到300个数据块,也只在文件subset1和subset2中写入一个数字。

1 个答案:

答案 0 :(得分:4)

您的编译器不支持具有此类容量的静态数组。使用允许这种情况的编译器(大多数现代编译器都可以)。

您也可以尝试动态分配内存。