2012-07-30 63 views
6

我想定義兩個函數,fdump和sdump,在每種情況下使用fprintf和sprintf將結構轉儲到文件或緩衝區。打印到緩衝區或文件重用代碼

有沒有一種方法來定義它們而不重複兩個函數中的代碼? 一種解決方案可以是限定sdump,然後根據它FdUMP的,E.I。:

void fdump(FILE* f, struct mystruct* param) { 
    char buffer[MAX]; 
    sdump(buffer, MAX, param); 
    fprint(f, "%s", buffer); 
} 

但是,溶液廢物和中間緩衝器。雖然也許fprintf也是這樣。其他解決方案可以通過預處理宏來實現,但看起來相當複雜。請有任何想法?

在此先感謝

+0

能你發佈sdump代碼? – perreal 2012-07-30 15:27:42

+0

尚未寫入。但它只會將結構的字段名和它們的值打印到緩衝區中。 – ldonoso 2012-08-01 06:29:14

回答

3

您可以使用fmemopen給你指向的內存塊和文件句柄然後再編寫函數的只有一個版本,需要一個文件句柄:

#include <stdio.h> 

void foo(FILE *fh) { 
    fprintf(fh, "test\n"); 
} 

int main() { 
    foo(stderr); 
    char str[100]; 
    FILE *mem = fmemopen(str, sizeof str, "w"); 
    foo(mem); 
    fclose(mem); 
    fprintf(stdout, "%s", str); 
    return 0; 
}