【发布时间】:2011-01-03 10:23:26
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *readLine(FILE *inFile) //Simply reads line in a text file till "\n"
{
char *line = realloc(NULL, 1);
char c;
int i=0;
while (!feof(inFile))
{
c = fgetc(inFile);
if (ferror(inFile)) printf("Error reading");
if (c == 10)
{
realloc(line,i+1);
line[i]= 10;
break;
}
realloc(line, i+1);
line[i++] = c;
}
return line;
}
int main(int argc,char **argv)
{
FILE *inFile;
inFile = fopen("testFile","r");
printf("%s",readLine(inFile));
printf("%s",readLine(inFile));
printf("%s",readLine(inFile));
return 0;
}
如果testFile的内容是:-
abc
def
ghi
三个 printf 语句应该显示“abc” 3 次。但是输出是:-
abc
def
ghi
我知道我在某个地方的概念是错误的。请帮忙。
【问题讨论】:
-
你的标题和问题完全矛盾。你在问哪个问题?
-
除了
realloc问题之外,您不应该调用feof作为循环条件。你的循环结构应该是:int c; /* Note that this is int, not char */ while ((c = fgetc(inFile)) != EOF) { /* ... */参见c-faq.com/~scs/cclass/int/sx2h.html 以获得解释。此外,与其重新发明轮子,不如考虑使用fgets,或者如果您想要一个能够动态分配足够长的缓冲区以容纳整行的版本,请使用 Chuck Falconer 的公共域ggets函数:cbfalconer.home.att.net/download/ggets.zip -
好的。我明白了。我读了c-faq ..thanx
标签: c gcc file-handling