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