我们有不同的方法来缓冲文件内容(传递/返回缓冲区到/从函数以及何时/何时分配内存)。所有这些功能对我有用,但哪一种是最标准的方式或推荐方式?
void buffering(FILE *file, char **buffer, int size)
{
*buffer = (char *) malloc (size);
read( input , *buffer , size );
}
呼叫:
char *buf;
buffering( file, &buf, size);
void buffering(FILE *file, char *buffer, int size)
{
read( input , buffer , size );
}
呼叫:
char *buf
buf = (char *) malloc (size);
buffering( file, buf, size);
char *buffering(FILE *file, int size)
{
char *buffer = (char *) malloc (size);
read( input , buffer , size );
return buffer;
}
呼叫:
char *buf = buffering( file, size);
答案 0 :(得分:2)
最推荐的方法是将所有缓冲封装到不透明的结构中,就像使用fopen
,fread
,fclose
系列函数一样。
答案 1 :(得分:1)
在函数内部分配缓冲区被认为是不好的做法。这是因为函数调用掩盖了对malloc
(或new
)的调用,并且调用者没有看到缓冲区分配并且对他不清楚(除非审查函数文档)他负责free
(或delete
)缓冲区。
通常,必须有缓冲区的“所有者”。该所有者必须对 分配和释放缓冲区负责。
所以回答你的问题
void buffering(FILE *file, char *buffer, int size);
是唯一一个好人。由于上述原因,其他的都不好。