2017-10-20 62 views
0

所以我試圖覆蓋c中的fscanf函數,但我只想要在滿足某些條件時發生不同的行爲;如果這些條件沒有得到滿足,我只想調用原始的fscanf。我知道你可以在插入它時使用dlsym來使用函數的原始版本,但是fscanf的問題在於它是可變的。我可以使用va_list和va_arg獲取所有傳入我的函數的參數,但是如果我實際上不知道有多少個參數,我該如何在這些參數上調用原始fscanf?僅在一定條件下插入fscanf

+0

關於轉發可變參數,您可以調用vfscanf。 –

回答

0

您不能從插入的fscanf調用原始fscanf。你只需要撥打vfscanf()。您插入的功能將如下所示:

int fscanf(FILE *stream, const char *format, ...) 
{ 
    .... 
    .... 

    va_list ap; 
    va_start(ap, format); 
    int rc = vfscanf(stream, format, ap); 
    va_end(ap); 
    return rc; 
}