, va_copy() C99; , . va_list, va_copy(), va_start(), va_end() stdarg.h.
GCC: va_list GCC, va_copy(), GCC va_list, av?? printf() .
SUN: va_list SunStudio (v11, v12) va_list , , va_copy().
MS_Visual C: , , V++ 2010 "va_copy()" , va_list , .
:
#include <stdio.h>
#include <stdarg.h>
int my_vsprintf(char **buffer, char *msg, va_list args)
{
int bufLen = 0;
va_list dupArgs;
#ifdef __GNUC__
va_copy(dupArgs,args);
#else
dupArgs = args;
#endif
bufLen = vsnprintf(NULL,0,msg, dupArgs);
#ifdef __GNUC__
va_end(dupArgs);
#endif
*buffer = realloc(*buffer,bufLen + 1);
#ifdef __GNUC__
va_copy(dupArgs,args);
#endif
bufLen = vsnprintf(buffer, bufLen+1, msg, dupArgs);
#ifdef __GNUC__
va_end(dupArgs);
#endif
return(bufLen);
}
int my_sprintf(char **buffer, char *msg, ...)
{
int bufLen = 0;
va_list myArgs;
va_start(myArgs, msg);
bufLen = my_vsprintf(buffer, msg, myArgs );
va_end(myArgs);
}