【发布时间】:2017-03-19 06:08:45
【问题描述】:
我需要从文件中逐行读取这是我的代码:
FILE *fp1;
char c;
int n = 500;
int counter = 0 ;
char *buffer;
buffer = (char*) realloc(buffer, n);
strcpy(buffer, "");
fp1 = fopen("text.txt","r");
if(fp1 == NULL)
{
perror("Error in opening file");
return;
}
do
{
c = fgetc(fp1);
//My specification .. stop reading if you read E
if( c == 'E' )
{
break ;
}
if (c == '\n') {
printf("%s\n", buffer);
counter=0;
strcpy(buffer, "");
}
else{
counter++;
/*handling overflow*/
if (counter > n) {
n+=100;
buffer = (char*) realloc(buffer, n);
}
strncat(buffer, &c,1);
}
}while(!feof (fp1));
问题是代码无法正常工作,它打印的行数比原始文本文件多。任何人都可以帮助找出原因吗?
附:我知道getc() 有替代品,但我需要使用它。
更新
我将缓冲区的初始化从原始更改为:
char *buffer = NULL;
& 所有其他 strcpy() 到此:
*buffer = NULL;
但仍然是同样的问题。
【问题讨论】:
-
1)
char *buffer;-->char *buffer = NULL; -
2) 如果
count != 0,则需要在if( c == 'E' )的块处刷新buffer -
这并不重要,因为我在这里存在循环
-
c应该是int,而不是char,因为fgetc返回int。 -
尝试将
if (counter > n)更改为if (counter > n - 2)和strncat(buffer, &c,1);更改为buffer[counter - 1] = c; buffer[counter] = '\0';。