信じられないほど単純であるべきことは、私を困惑させました。私がやっているのはgetLine
、行をバッファに読み込むメソッドを書いていることだけです。から始まるバッファーにメモリを割り当て10 bytes
、次にfgets
char 配列に割り当てます。アイデアは、行全体を取得するまで、バッファーのサイズを 2 倍にして、これを何度も試行することです。ただし、私が観察しているように見えるのは、行の一部を読み取り、次の試行で最後の試行でスペースが不足した場所を続行するため、行の最後の部分を提供することです。何が間違っているかについての洞察は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