If you are ready to play a dirty game located on printf , you can "steal" its output by doing something like:
#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; }
You can use the flag to specify how to handle instances in which you want printf to work as usual. (For example, draw it on fprintf or use dlsym() / to find the real call).
You can also use realloc for more intelligent buffer size management.
Flexo
source share