2017-10-20 5 views
0

Also versuche ich die fscanf-Funktion in c zu überschreiben, aber ich möchte nur unterschiedliche Verhalten auftreten, wenn bestimmte Bedingungen erfüllt sind; Wenn diese Bedingungen nicht erfüllt sind, möchte ich nur das Original fscanf aufrufen. Ich weiß, dass Sie dlsym verwenden können, um die ursprüngliche Version einer Funktion zu verwenden, während Sie es interpositionieren, aber das Problem mit fscanf ist, dass es variadic ist. Ich kann alle Parameter, die mit va_list und va_arg in meine Funktion übergeben werden, bekommen, aber wie soll ich das ursprüngliche fscanf auf diesen Parametern aufrufen, wenn ich nicht weiß, wie viele Parameter es gibt?fscanf nur unter bestimmten Bedingungen interfugen

+0

In Bezug auf die Weiterleitung Variadic Args, würden Sie vfscanf aufrufen. –

Antwort

0

Sie können das ursprüngliche fscanf nicht vom dazwischenliegenden fscanf aufrufen. Sie müssen nur vfscanf() anrufen. Ihre zwischenliegende Funktion würde wie aussehen:

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; 
} 
Verwandte Themen