选择一种在C中缓冲文件内容的方法

时间:2014-03-05 18:45:03

标签: c buffering

我们有不同的方法来缓冲文件内容(传递/返回缓冲区到/从函数以及何时/何时分配内存)。所有这些功能对我有用,但哪一种是最标准的方式或推荐方式?

1

void buffering(FILE *file, char **buffer, int size)
{
    *buffer = (char *) malloc (size);
    read( input , *buffer , size );
}

呼叫:

char *buf;
buffering( file, &buf, size);

2

void buffering(FILE *file, char *buffer, int size)
{
    read( input , buffer , size );
}

呼叫:

char *buf
buf = (char *) malloc (size);
buffering( file, buf, size);

3:

char *buffering(FILE *file, int size)
{
    char *buffer = (char *) malloc (size);
    read( input , buffer , size );
    return buffer;
}

呼叫:

char *buf = buffering( file, size);

4 :(告诉我)

2 个答案:

答案 0 :(得分:2)

最推荐的方法是将所有缓冲封装到不透明的结构中,就像使用fopenfreadfclose系列函数一样。

答案 1 :(得分:1)

在函数内部分配缓冲区被认为是不好的做法。这是因为函数调用掩盖了对malloc(或new)的调用,并且调用者没有看到缓冲区分配并且对他不清楚(除非审查函数文档)他负责free(或delete)缓冲区。

通常,必须有缓冲区的“所有者”。该所有者必须对 分配和释放缓冲区负责。

所以回答你的问题

void buffering(FILE *file, char *buffer, int size);

是唯一一个好人。由于上述原因,其他的都不好。