D - va_list / rolling your own printf / OutBuffer
- Sean L. Palmer (21/21) May 27 2002 I'm trying to make my own variant of printf (one that prints into a dyna...
- Sean L. Palmer (17/38) May 27 2002 I got this to work but I think it's a sucky kludge as I can't predict ho...
- Pavel Minayev (4/7) May 27 2002 OutBuffer's buggy. You've got to wait till Walter fixes it... or write
I'm trying to make my own variant of printf (one that prints into a dynamic array of char) and am having problems with the OutBuffer class. char[] Fmt(char[] fmtp, ...) { va_list ap; ap = cast(va_list)&fmtp; ap += fmtp.size; printf(fmtp,*(int*)ap); // this works fine OutBuffer buf; buf.vprintf(fmtp, ap); // this doesn't work, causes program termination errorlevel 128 return buf.toString(); // but if I don't put something into buf, this crashes! } ... printf(Fmt("This is %dth test\n",45)); // should print This is 45th test, but it just bombs Am I using OutBuffer wrongly? Misunderstanding D's va_list? or what? If I leave out buf.vprintf(fmtp, ap), I get a crash. If I leave it in, I get the exit(128). Sean
May 27 2002
I got this to work but I think it's a sucky kludge as I can't predict how many characters I'll need: import c.stdio; char[] Fmt(char[] fmtp, ...) { va_list ap; ap = cast(va_list)&fmtp; ap += fmtp.size; char[] buf; buf.length = 1024; vsprintf(buf, fmtp, ap); buf.length = strlen(buf); return buf; } "Sean L. Palmer" <seanpalmer earthlink.net> wrote in message news:acus8q$gna$1 digitaldaemon.com...I'm trying to make my own variant of printf (one that prints into adynamicarray of char) and am having problems with the OutBuffer class. char[] Fmt(char[] fmtp, ...) { va_list ap; ap = cast(va_list)&fmtp; ap += fmtp.size; printf(fmtp,*(int*)ap); // this works fine OutBuffer buf; buf.vprintf(fmtp, ap); // this doesn't work, causes program termination errorlevel 128 return buf.toString(); // but if I don't put something into buf, this crashes! } ... printf(Fmt("This is %dth test\n",45)); // should print This is 45th test, but it just bombs Am I using OutBuffer wrongly? Misunderstanding D's va_list? or what? If I leave out buf.vprintf(fmtp, ap), I get a crash. If I leave it in, I get the exit(128). Sean
May 27 2002
"Sean L. Palmer" <seanpalmer earthlink.net> wrote in message news:acus8q$gna$1 digitaldaemon.com...printf(Fmt("This is %dth test\n",45)); // should print This is 45th test, but it just bombs Am I using OutBuffer wrongly? Misunderstanding D's va_list? or what?OutBuffer's buggy. You've got to wait till Walter fixes it... or write your own.
May 27 2002