Re: varargs mehrfach benutzbar?
- From: Michael Mair <Michael.Mair@xxxxxxxxxxxxxxx>
- Date: Thu, 31 Aug 2006 21:14:12 +0200
Thomas Richter schrieb:
<snip>
va_list args;<snip>
va_init(args,fmt);<snip>
size = vsnprintf(buf,32,fmt,args);
vsnprintf(largebuf,size,fmt,args);<snip>
/* more code here...*/
va_end(args);
}
Funktionieren tut's so mit g++-4.1.2 auf i386, abst"urzen tut's mit dem
gleichen Compiler auf AMD64. Eine weitere Untersuchung ergab, dass das erste vsnprintf() die Argumentenliste "args" ver"andert, so dass das zweite vsnprintf() nur noch M"ull findet. Fix oder worarkound ist relativ leicht:
va_init(args,fmt);
size = vsnprintf(buf,32,fmt,args);
va_end(args); /* inserted...*/
va_start(args,fmt); /* inserted... */
largebuf = malloc(size + 1); /* error checking dropped... */
Auch das funktioniert IMO nicht garantiert, da nirgendwo steht,
dass man va_start zweimal verwenden kann -- allerdings steht
auch nur da, dass va_arg() die va_list veraendert; vielleicht
uebersehe ich auch etwas.
Wenn Du vsnprintf() (dank C99) hast, sollte auch va_copy in
<stdarg.h> zu finden sein, womit es garantiert funktioniert.
Gruss
Michael
--
E-Mail: Mine is an /at/ gmx /dot/ de address.
.
- References:
- varargs mehrfach benutzbar?
- From: Thomas Richter
- varargs mehrfach benutzbar?
- Prev by Date: Re: varargs mehrfach benutzbar?
- Previous by thread: Re: varargs mehrfach benutzbar?
- Index(es):
Relevant Pages
|
|