難以置信的簡單應該讓我難住。我所做的只是編寫一個getLine
方法,該方法應該將一行讀入緩衝區。我將內存分配給開始於10 bytes
的緩衝區,然後將fgets
分配到char數組中。我的想法是,我一遍又一遍地嘗試,將緩衝區的大小加倍,直到獲得整個行。然而,我似乎正在觀察的是它讀取了一行的一部分,然後在下一次嘗試繼續它在最後一次嘗試時跑出房間,因此它給出了該行的最後一部分。任何洞察它到什麼是錯誤的,我期望與我的realloc
內存緩衝區,將不勝感激。使用fgets從文件讀取一條線
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
我認爲這個想法是,你realloc舊緩衝區(舊數據自動複製),然後繼續閱讀到(現在更大)的緩衝區。 – hyde