Wenn Sie bereit sind, ein schmutziges Spiel auf printf
Zwischen spielen möchten, können Sie ‚stehlen‘ seinen Ausgang so etwas wie tun:
#include <stdio.h>
#include <stdarg.h>
static char buffer[1024];
static char *next = buffer;
static void funcB(){
printf("%s", "My Name is");
printf("%s", "I like ice cream");
}
static void funcA(){
funcB();
// Do stuff iwth buffer here
fprintf(stderr, "stole: %s\n", buffer);
next=buffer; // reset for later.
}
int main() {
funcA();
}
int printf(const char *fmt, ...) {
va_list argp;
va_start(argp, fmt);
const int ret = vsnprintf(next, sizeof buffer-(next-buffer), fmt, argp);
next += ret;
va_end(argp);
return ret;
}
Sie ein Flag verwenden könnte, um anzuzeigen, wie die Instanzen zu handhaben, wo Sie wollen printf funktioniert normal. (Z. B. map es auf fprintf
oder verwenden Sie dlsym()
/ähnlich, um den echten Anruf zu finden).
Sie könnten auch realloc
verwenden, um die Größe des Puffers vernünftiger zu verwalten.
Was wäre, wenn 'funcB' nicht seine Ausgabe ausgibt, sondern stattdessen' funcA' zurückgibt? Schwer zu sagen von der abstrakten Beschreibung, wie Sie angegeben haben, genauer zu sein. – LihO
* "Dies ist eine C++ Frage" * - es sieht eher wie eine C Frage aus. Wenn es C++ wäre, könntest du so etwas machen wie: [this] (http://stackoverflow.com/a/8076948/168175). – Flexo
Es sieht eher wie eine OS-spezifische Frage für mich aus, wie in meiner Antwort angedeutet. –