所以我试图覆盖c中的fscanf函数,但我只想要满足某些条件时会发生不同的行为;如果不满足这些条件,我想打电话给原来的fscanf。我知道你可以使用dlsym在插入函数时使用函数的原始版本,但fscanf的问题在于它的可变参数。我可以使用va_list和va_arg将所有参数传递到我的函数中,但是当我不知道有多少参数时,我应该如何调用这些参数的原始fscanf?
答案 0 :(得分: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;
}