I have the following example code
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
void myprint(char *inizio, ...);
int main(void)
{
myprint("Inizio", 2, 3.0, 4, 5.0, 'c');
return(0);
}
void myprint(char *inizio, ...)
{
va_list argPoint;
int pi;
char pc;
double pd;
va_start(argPoint, inizio);
pi=va_arg(argPoint,int);
printf("Int = %d\n", pi);
pi=va_arg(argPoint,int);
printf("Int = %d\n", pi);
pd=va_arg(argPoint,double);
printf("Int = %f\n", pd);
/* need a cast here since va_arg only takes fully promoted types
pc=va_arg(argPoint,char); */
pc=(char)va_arg(argPoint,int);
printf("Int = %c\n", pc);
pd=va_arg(argPoint,double);
printf("Int = %f\n", pd);
pi=va_arg(argPoint,int);
printf("Int = %d\n", pi);
va_start(argPoint, inizio);
pi=va_arg(argPoint,int);
printf("Int = %d\n", pi);
va_end(argPoint);
}
I am getting the following output:
Int = 2
Int = 0
Int = 0.000000
Int =
Int = 0.000000
Int = 117
Int = 2
The answer according to my handout should be:
Int = 2
Int = 4
Int = 3.000000
Int = c
Int = 5.000000
Int = 1235099264
Int = 2
Why is it not working? I am using Codeblocks by the way, just in case.
Additionally what does the comment " need a cast here since va_arg only takes fully promoted types pc=va_arg(argPoint,char); " means? va_arg(argPoint,char)
is supposed to return a char
, I don't see why they do pc=(char)va_arg(argPoint,int)
instead, the (char)
seems redundant.