以下是引用TonyDeng在2013-3-20 14:30:42的发言:
你文件中那些数据,在内存中以二进制格式储存,接近700K,Windows平台下默认程序的栈大小是1M,你如果在栈上分配数组,有点危险。不过这还不算大问题,现在是读入外部数据的时候没有事先获取有多少组数据,很难准确分配数组的大小,而数组是无法动态伸缩的(其实使用C++的vector好操作得多),分多了有浪费,而分到1M又会破坏程序。我不知道你怎么算那个数组尺寸的。
您好,因为一行数据有的比较多,我要把他们分别表示出来,下面是我编的一个程序
#include"stdio.h"
#include"stdlib.h"
FILE *fp,*str,*date1,*date2;
struct motif
{
int start[125];
int end[125];
int num;
}lead[17175];
void Out(int a, int b)
{
char zifu;
fseek(fp,(a-1),0);
while (a++<=b)
{
zifu=fgetc(fp);
fprintf(str,"%c",zifu);
}
}
void main()
{
int i,j;
fp=fopen("F:\\人类23条染色体\\rst1.txt", "r");
date1=fopen("E:\\寻找内含子序列\\17174个基因.txt","r");
//这一行里,文件中存的是每一行数据的个数,我在下面给出这个文件!!1
date2=fopen("E:\\寻找内含子序列\\每个基因上的外显子起始与终止.txt","r");
str=fopen("E:\\寻找内含子序列\\内含子序列.txt","w");
for(i=0;i<17175;i++)
fscanf(date1,"%d",&lead[i].num);
for(i=0;i<17175;i++)
for(j=0;j<lead[i].num;j++)
fscanf(date2,"%d,%d,",&lead[i].start[j],&lead[i].end[j]);
for(i=0;i<17175;i++)
for(j=0;j<lead[i].num-1;j++)
Out(lead[i].end[j],lead[i].start[j+1]);
fclose(fp);
}
我感觉自己编的这个有些小问题,但找不出来,还望赐教!!!!!!