2016-03-02 88 views
4

我試圖用ld-wrap選項攔截對printf的呼叫。我有兩個文件:爲什麼換行時使用ld打印printf失敗?

的main.c:

#include <stdio.h> 

int main(void) { 
    printf("printing\n"); 
    printf("printing"); 
} 

printf_wrapper.c:

int __real_printf(const char *format, ...); 

int __wrap_printf(const char *format, ...) { 
    (void)format; 
    return __real_printf("WRAPPED\n"); 
} 

我用下面的命令編譯:

gcc -Wl,-wrap,printf *.c 

當我運行結果a.out二進制,我得到這個輸出:

printing 
WRAPPED 

如果字符串中有換行符,爲什麼換行失敗?我檢查了我的系統的stdio.h和printf不是一個宏。這是與海灣合作委員會5.3.0

+0

如果您交換訂單或同時使用換行符,您會得到什麼? – Olaf

+2

您是否試過關閉優化?海灣合作委員會可能已經改變你的printf其他東西,比如說put。 – bruceg

+0

如果我在源中交換訂單,則會交換打印的順序。另外,如果我有一個換行符和一個變量(例如'printf(「print:%d \ n」,1);'),則它將被正確包裝 – awelkie

回答

相關問題