C Programming - Variable Number of Arguments - Discussion

Discussion Forum : Variable Number of Arguments - Find Output of Program (Q.No. 1)
1.
What will be the output of the program?
#include<stdio.h>
#include<stdarg.h>
void fun(char *msg, ...);

int main()
{
    fun("IndiaBIX", 1, 4, 7, 11, 0);
    return 0;
}
void fun(char *msg, ...)
{
    va_list ptr;
    int num;
    va_start(ptr, msg);
    num = va_arg(ptr, int);
    num = va_arg(ptr, int);
    printf("%d", num);
}
IndiaBIX 1 7 11 0
1
4
7
Answer: Option
Explanation:
No answer description is available. Let's discuss.
Discussion:
34 comments Page 1 of 4.

Irshad said:   1 decade ago
#include<stdio.h>
#include<stdarg.h>
void irshad(char *arr, ...)
{
int num;
va_list ptr; /* create a new list ptr */
va_start(ptr,arr); /* attach ptr with arr */
printf("\n num=%d",arr); /* it will print 1st argument */
num = va_arg(ptr,int); /* fetch 2nd argument */
printf("\n num=%d",num);
num = va_arg(ptr,int); /* fetch 3rd argument */
printf("\n num=%d",num);
}
int main()
{

printf("\n variable argument:");
irshad(10,20,30,40,50,0);
return 0;
}


/* output */

variable argument:
num=10
num=20
num=30


Please let me know if any problem to understand this one.
irshadalam.mca[at]gmail.com

Manish roy said:   7 years ago
First of all va_start and va_arg are a macro defined in stdarg.h header file.

Va_list type is also defined in the stdarg.h,
Here ptr is va_list type variable.

Va_start macro and int parameter is used to initialize the va_list variable to an argument list.
Then we use va_arg macro and va_list variable to access each item in an argument list.
So num=va_arg(ptr,int); assigns integer value to num i.e.1.
Then the second statement num=va_arg(ptr,int);assigns 4 to num.
Then printf statement is given so 4 is printed and hence the output.
(1)

Avijit_softlove said:   1 decade ago
#include<stdio.h>
#include<stdarg.h>
void fun(char *msg, ...);

int main()
{
fun("IndiaBIX", 1, 4, 7, 11, 0);
return 0;
}
void fun(char *msg, ...)
{
va_list ptr; /* create a new list ptr */
int num;
va_start(ptr, msg); /* attach ptr with msg */
num = va_arg(ptr, int); /* fetch 2nd argument */
num = va_arg(ptr, int); /* fetch 3rd argument */
printf("%d", num);
}

Lavanya said:   1 decade ago
#include<stdio.h>
#include<stdarg.h>
void fun(char *msg, ...);

int main()
{
fun("IndiaBIX", 1, 4, 7, 11, 0);
return 0;
}
void fun(char *msg, ...)
{
va_list ptr; /* create a new list ptr */
int num;
va_start(ptr, msg); /* attach ptr with msg */
num = va_arg(ptr, int); /* fetch 2nd argument */
num = va_arg(ptr, int); /* fetch 3rd argument */
printf("%d", num);
}

GUNA said:   6 years ago
Here, va_list, it is only focused to the defined values in the func arguments. As same here, here we have char msg also, that is totally differ on output. Main thing is on First call of var_arg it takes the first value of the argument and second time by default it moves on next value, that's what we got the output as 4.

Shiv said:   1 decade ago
va_list ptr is an argument pointer, used to traverse through the variable arguments passed in the function.

va_start points 'ptr' to the first argument, in this case 'IndiaBix'

Every call to va_arg moves the ptr to next variable argument.

Hence after 2 calls to va_arg, the pointer ends up at '7' and num is '4'.

Suhas said:   9 years ago
1. There are three macros available in file "stdarg.h" --->.

- va_start: is used to initialize the pointer to the beginning of the list of optional arguments.
- va_arg: is used to advance the pointer to next argument *.
- va_list: va_list is like any other type.

Enia said:   4 years ago
num = va_arg(ptr, int); // means num fetches the next element in the arguments that is of int type.

First time, it fetches the argument with 1 value. Neglecting the char * as it's not of type int
and second time, it fetches the argument with the 4 value.

Vandana said:   10 years ago
Va_list ptr;

Va_list is not struct name than why we are creating a new pointer of Va_list type.

What is this? Is any data type?

Is Va_start is builtin function?

I am very confused please tell me the every thing in a proper manner.

Satapure abhishek said:   4 years ago
It is the ellipse program it is used to send multiple number of argument.
fun("indiabix",1,4,7,11,0);//fun call.
va_list ptr;//ptr is pointer of va_list;
num=va_arg(ptr,int);//num is int type ;
So it print 4;


Post your comments here:

Your comments will be displayed after verification.