读书人

文件读取的有关问题 ~

发布时间: 2012-03-29 12:53:13 作者: rapoo

文件读取的问题 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
想把一个文本文件读入到char * lines[MAX_LINES]当中,发现读完第34行的时候(文件有36行),系统就会指示内存出错,其中MAX_LINE_LENGTH 和MAX_LINES都够用.
请高手看看这个程序有什么问题?

------------------------------------------
int myfgets(char* line, int n, FILE * fr)
//从文件中读入一行并把 '\n '替换为 '\0 '
{
int c;
int count = 0;
while (count < n-1 && (c = getc(fr)) != EOF && c != '\n ')
{
*(line++) = c;
count++;
}
*line = '\0 ';
return count;
}

main中的程序:

char * lines[MAX_LINES];
char line[MAX_LINE_LENGTH];
FILE *fr;

fr = fopen(filename, "r ");
if(!fr)
{
printf( "open error\n ");
return FALSE;
}

while ( (lines[i] = (char *)calloc(1,MAX_LINE_LENGTH)) && (length = myfgets(lines[i], MAX_LINE_LENGTH, fr)) )
{
printf( "%d %s\n ",i,lines[i]);
i++;
}
fclose(fr);
------------------------------------


[解决办法]
其他的没看出什么问题:

#include <stdio.h>
#include <stdlib.h>

#define MAX_LINES 20
#define MAX_LINE_LENGTH 80
int myfgets(char* line, int n, FILE * fr)
//从文件中读入一行并把 '\n '替换为 '\0 '
{
int c;
int count = 0;
while (count < n-1 && (c = getc(fr)) != EOF && c != '\n ')
{
*(line++) = c;
count++;
}
*line = '\0 ';
return count;
}

int main()
{
char * lines[MAX_LINES];
FILE *fr;
int i=0, length;

fr = fopen( "test.txt ", "r ");
if(!fr)
{
printf( "open error\n ");
return 0;
}

while ( (lines[i] = (char *)calloc(1, MAX_LINE_LENGTH)) && (length = myfgets(lines[i], MAX_LINE_LENGTH, fr)) )
{
printf( "%d %s\n ",i,lines[i]);
i++;
}
fclose(fr);
return 0;
}

test.txt 在当前目录下,测试内容为:
2007-07-18 21:20:003.6482.0353.315448.980293.850484.750
2007-07-18 21:25:003.6482.0353.315448.980293.850484.750
2007-07-18 21:30:003.6482.0353.315448.980293.850484.750
2007-07-18 21:35:003.6482.0353.315448.980293.850484.750
2007-07-18 21:40:003.6482.0353.315448.980293.850484.750
2007-07-18 21:45:003.6482.0353.315448.980293.850484.750
2007-07-18 21:50:003.6482.0353.315448.980293.850484.750
2007-07-18 21:55:003.6482.0353.315448.980293.850484.750
2007-07-18 22:00:003.6482.0353.315448.980293.850484.750

读书人网 >C语言

热点推荐