How to capture output of printf?

后端 未结 4 1837
不思量自难忘°
不思量自难忘° 2020-12-29 14:49

I am calling a function funcB from funcA. funcB uses several printf statements to output data. Is there a way for me to c

4条回答
  •  情歌与酒
    2020-12-29 15:30

    If you're willing to play a dirty game interposing on printf you can 'steal' its output doing something like:

    #include 
    #include 
    
    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 could use a flag to indicate how to handle the instances where you want printf to work as normal. (E.g. map it onto fprintf or use dlsym()/similar to find the real call).

    You could also use realloc to manage the size of the buffer more sensibly.

提交回复
热议问题