什么应该是难以置信的简单让我难住了。我所做的只是编写一个getLine
应该将一行读入缓冲区的方法。我从 开始将内存分配给缓冲区10 bytes
,然后分配给fgets
char 数组。这个想法是我一遍又一遍地尝试这个,将缓冲区的大小加倍,直到它得到整行。但是,我似乎观察到的是它读取了该行的一部分,然后在下一次尝试中继续在上次尝试时空间不足的地方,因此它给出了该行的最后一部分。任何关于错误的见解,我希望我realloc
对缓冲区的记忆,将不胜感激。
char * mygetline( char **buffer, FILE * infile )
{
int buffSiz = 10;
*buffer = calloc( buffSiz, 1 );
do
{
char * result = fgets(*buffer, sizeof *buffer ,infile);
if(result == NULL)
{
free(buffer);
return NULL;
}
if(strchr(*buffer, '\n'))
return *buffer;
else
{
char *newBuf;
buffSiz = buffSiz*2;
newBuf = realloc(NULL, buffSiz);
char *buffer = newBuf;
printf("%d", buffSiz);
printf("%s", *buffer);
}
} while (1); // INFINITE LOOP - WE ONLY GET OUT BY RETURNING FROM WITHIN