【发布时间】:2022-01-20 02:06:46
【问题描述】:
我有三个文本文件,其中包含一个行列表,每行包含一个纬度经度和值。这些数组涵盖了不同的纬度和经度范围。现在我要制作三个不同的纬度数组、三个不同的经度数组和三个不同的值数组,其中每个文本文件都应该生成一个纬度、经度和值数组。
下面是我试图完成此操作的 c 代码:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
int main(int argc, char *argv[])
{
FILE *fp=NULL, *fpb=NULL, *fpc=NULL, *FPOUT=NULL;
char inpFname[81],inpFnameb[81],inpFnamec[81],FILEOUT[81];
int i,j,k;
char buf[8000];
int count;
char datetime[10],year[4],month[2],day[2],hour[2],type[10];
float latnum,lonnum,valnum;
float latnumb,lonnumb,valnumb;
float latnumc,lonnumc,valnumc;
float* latarray = malloc(sizeof(float) * 1038240);
float* lonarray = malloc(sizeof(float) * 1038240);
float* valarray = malloc(sizeof(float) * 1038240);
float* latarrayb = malloc(sizeof(float) * 3185);
float* lonarrayb = malloc(sizeof(float) * 3185);
float* valarrayb = malloc(sizeof(float) * 3185);
float* latarrayc = malloc(sizeof(float) * 5265);
float* lonarrayc = malloc(sizeof(float) * 5265);
float* valarrayc = malloc(sizeof(float) * 5265);
sprintf(datetime,"%s",argv[1]);
sprintf(inpFname,"100_%s.txt1",datetime);
printf("%s\n",inpFname);
if ((fp=fopen(inpFname,"rt"))==NULL)
{
printf("\nERROR: Cannot open/read input file [%s]\n\n",inpFname);
exit(1);
}
i=0;
while(i < 1038240 && fgets(buf,sizeof buf, fp))
{
sscanf(buf,"%f %f %f\n",&latnum,&lonnum,&valnum);
latarray[i]=latnum;
lonarray[i]=lonnum;
valarray[i]=valnum;
i=i+1;
}
fclose(fp);
sprintf(inpFnameb,"100_%s.txt2",datetime);
printf("%s\n",inpFnameb);
if ((fpb=fopen(inpFnameb,"rt"))==NULL)
{
printf("\nERROR: Cannot open/read input file [%s]\n\n",inpFnameb);
}
i=0;
while(i < 3185 && fgets(buf,sizeof buf, fpb))
{
sscanf(buf,"%f %f %f\n",&latnumb,&lonnumb,&valnumb);
latarrayb[i]=latnumb;
lonarrayb[i]=lonnumb;
valarrayb[i]=valnumb;
i=i+1;
}
fclose(fpb);
sprintf(inpFnamec,"100_%s.txt3",datetime);
printf("%s\n",inpFnamec);
if ((fpc=fopen(inpFnamec,"rt"))==NULL)
{
printf("\nERROR: Cannot open/read input file [%s]\n\n",inpFnamec);
}
i=0;
while(i < 3185 && fgets(buf,sizeof buf, fpb))
{
sscanf(buf,"%f %f %f\n",&latnumc,&lonnumc,&valnumc);
latarrayc[i]=latnumc;
lonarrayc[i]=lonnumc;
valarrayc[i]=valnumc;
i=i+1;
}
fclose(fpc);
}
不幸的是,在运行此代码时,我遇到了分段错误。如果我取出第三组数组(arrayc),我没有得到这个分段错误,所以可能存在内存问题。如何调整这个程序,以免出现分段错误,并能够达到我想要的结果,即为每个文件获取一个纬度、经度和值数组,总共 9 个数组?
【问题讨论】: