我需要分配一个包含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中写入一个数字。
答案 0 :(得分:4)
您的编译器不支持具有此类容量的静态数组。使用允许这种情况的编译器(大多数现代编译器都可以)。
您也可以尝试动态分配内存。