我想從文本文件中逐行讀取文本,並對這些行進行一些處理。我可以做所有的處理,但是我不能用malloc-realloc來增長內存。我首先給了有限的內存,如果我的文本文件的行字符在這個限制內,一切都可以。如果我使用每行10000字的大文件,它只會讀取我的限制。我不完全明白如何使用realloc()
。我能做些什麼關於這個代碼?從文件中讀取文本並在需要時重新分配
void stat(char* fileptr)
{
FILE *fp;
char *linebuffer;
int line=0;
int sum=0;
int max=0;
int min=0;
int maxlinelen=512;
int i=0,j=0;
int maxlen=512;
int curlinelen[maxlen];
linebuffer=(char*) malloc(maxlinelen * sizeof(char));
if(linebuffer==NULL)
{
printf("Error occurred allocating memory for linebuffer");
exit(1);
}
if((fp=fopen(fileptr,"r"))!=NULL)
{
while((fgets(linebuffer,maxlinelen,fp))!=NULL)
{
if(strlen(linebuffer)==maxlinelen)
{
maxlinelen*=2;
linebuffer=realloc(linebuffer,maxlinelen * sizeof(char));
if(linebuffer==NULL)
{
printf("Error occurred reallocating space for linebuffer");
exit(1);
}
}
line++;
sum=sum+strlen(linebuffer);
curlinelen[i]=strlen(linebuffer);
i++;
}
}
min=curlinelen[0];
max=curlinelen[0];
for(j=0;j<line;j++)
{
if(curlinelen[j]<min)
{
min=curlinelen[j];
}
if(curlinelen[j]>max)
{
max=curlinelen[j];
}
}
printf("No. of lines =%d\n",line);
printf("Maximum line length =%d\n",max);
printf("Minimum line length =%d\n",min);
printf("Average line length =%8.2f\n",(float)sum/(float)line);
fclose(fp);
}
'* sizeof(char)'是不需要的,並且類型爲'malloc()'的返回是不明智的。 – Mike
而不是'sizeof(char)'我會使用'sizeof(* linebuffer)',如果您決定將線緩衝區的類型更改爲寬字符串或其他類型,則會自動變大。 – Wug