Point Out Errors

Question 1 :

Point out the error in the following program.

#include < stdio . h >
#include < stdarg . h >
fun(...);

int main()
{
    fun(3, 7, -11.2, 0.66);
    return 0;
}
fun(...)
{
    va_list ptr;
    int num;
    va_start(ptr, n);
    num = va_arg(ptr, int);
    printf("%d", num);
}


A). Error: fun() needs return type
B). Error: ptr Lvalue required
C). Error: Invalid declaration of fun(...)
D). No error
Answer : Option C

Explanation :

There is no fixed argument in the definition fun()


Question 2 :

Point out the error if any in the following program (Turbo C).

#include < stdio . h >
#include < stdarg . h >
void display(int num, ...);

int main()
{
    display(4, 'A', 'a', 'b', 'c');
    return 0;
}
void display(int num, ...)
{
    char c; int j;
    va_list ptr;
    va_start(ptr, num);
    for(j=1; j <= num; j++)
    {
        c = va_arg(ptr, char);
        printf("%c", c);
    }
}


A). Error: unknown variable ptr
B). Error: Lvalue required for parameter
C). No error and print A a b c
D). No error and print 4 A a b c
Answer : Option C

Question 3 :

Point out the error in the following program.

#include < stdio . h >
#include < stdarg . h >
void varfun(int n, ...);

int main()
{
    varfun(3, 7, -11, 0);
    return 0;
}
void varfun(int n, ...)
{
    va_list ptr;
    int num;
    num = va_arg(ptr, int);
    printf("%d", num);
}


A). Error: ptr has to be set at begining
B). Error: ptr must be type of va_list
C). Error: invalid access to list member
D). No error
Answer : Option A

Explanation :

Using va_start(ptr, int);


Question 4 :

Point out the error in the following program.

#include < stdio . h >
#include < stdarg . h >

int main()
{
    void display(char *s, int num1, int num2, ...);
    display("Hello", 4, 2, 12.5, 13.5, 14.5, 44.0);
    return 0;
}
void display(char *s, int num1, int num2, ...)
{
    double c;
    char s;
    va_list ptr;
    va_start(ptr, s);
    c = va_arg(ptr, double);
    printf("%f", c);
}


A). Error: invalid arguments in function display()
B). Error: too many parameters
C). Error: in va_start(ptr, s);
D). No error
Answer : Option C

Explanation :

We should have use va_start(ptr, num2);


Question 5 :

Point out the error in the following program.

#include < stdio . h >
#include < stdarg . h >

int main()
{
    void display(int num, ...);
    display(4, 12.5, 13.5, 14.5, 44.3);
    return 0;
}
void display(int num, ...)
{
    float c; int j;
    va_list ptr;
    va_start(ptr, num);
    for(j=1; j<=num; j++)
    {
        c = va_arg(ptr, float);
        printf("%f", c);
    }
}


A). Error: invalid va_list declaration
B). Error: var c data type mismatch
C). No error
D). No error and Nothing will print
Answer : Option B

Explanation :

Use double instead of float in float c;


Question 6 :

Point out the error in the following program.

#include < stdio . h >
#include < stdarg . h >
void display(char *s, ...);
void show(char *t, ...);

int main()
{
    display("Hello", 4, 12, 13, 14, 44);
    return 0;
}
void display(char *s, ...)
{
    show(s, ...);
}
void show(char *t, ...)
{
    int a;
    va_list ptr;
    va_start(ptr, s);
    a = va_arg(ptr, int);
    printf("%f", a);
}


A). Error: invalid function display() call
B). Error: invalid function show() call
C). No error
D). Error: Rvalue required for t
Answer : Option B

Explanation :

The call to show() is improper. This is not the way to pass variable argument list to a function.


Question 7 :

Point out the error in the following program.

#include < stdio . h >
#include < stdarg . h >
void varfun(int n, ...);

int main()
{
    varfun(3, 7, -11.2, 0.66);
    return 0;
}
void varfun(int n, ...)
{
    float *ptr;
    int num;
    va_start(ptr, n);
    num = va_arg(ptr, int);
    printf("%d", num);
}


A). Error: too many parameters
B). Error: invalid access to list member
C). Error: ptr must be type of va_list
D). No error
Answer : Option C