2012-07-30 3 views
6

Ich möchte zwei Funktionen, fdump und sdump definieren, um eine Struktur in eine Datei oder einen Puffer mit fprintf und sprintf in jedem Fall auszugeben.Drucken in einen Puffer oder Datei, die Code wiederverwenden

Gibt es eine Möglichkeit, sie zu definieren, ohne den Code in den beiden Funktionen zu wiederholen? könnte eine Lösung sein SDUMP definieren und dann auf sie FdUMP basiert, E.Ich .:

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

Aber diese Lösung Abfälle und Zwischenpuffer. Obwohl vielleicht fprintf das gleiche tut. Eine andere Lösung könnte mit Hilfe von Vorverarbeitungs-Makros erfolgen, aber es sieht ziemlich kompliziert aus. Bitte, irgendwelche Ideen?

Vielen Dank im Voraus

+0

können Sie posten den sdump Code? – perreal

+0

Es ist noch nicht geschrieben. Es wird jedoch nur der Name der Felder der Struktur und ihrer Werte in einen Puffer gedruckt. – ldonoso

Antwort

3

Sie fmemopen verwenden, können Sie ein Datei-Handle zu geben, die auf einen Teil des Speichers zeigt, und dann nur eine Version Ihrer Funktion schreiben, die einen Griff Datei nimmt:

#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; 
} 
Verwandte Themen