我倾向于将整个缓冲区作为原始内存块加载到内存中,然后自己进行解析.这样,我可以最好地控制标准库在多个平台上执行的操作.
这是我用来做这个的存根.您可能还想判断FSEEK、FTELL和FREAD的错误代码.(为清楚起见省略).
char * buffer = 0;
long length;
FILE * f = fopen (filename, "rb");
if (f)
{
fseek (f, 0, SEEK_END);
length = ftell (f);
fseek (f, 0, SEEK_SET);
buffer = malloc (length);
if (buffer)
{
fread (buffer, 1, length, f);
}
fclose (f);
}
if (buffer)
{
// start to process your data / extract strings here...
}