Honestly, while I am looking at this, I don't see a reason why you need to
have it as a static buffer.. Since a static retains the information in the
memory, and you aren't resetting it at the beginning, then you have really
one of two choices. Either don't use a static, or make sure you reset the
static buf_new to '\0' at the beginning of the function.

-V

----- Original Message ----- 
From: "Michael Barton" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Thursday, February 12, 2004 3:41 AM
Subject: Re: Formatting numbers


> Best option I think is to pass fnum a separate buffer for each call.
>
> char buffer1[16], buffer2[16];
> ...
> printf_to_ch(ch, "Your current balance is: %s Steel and %s Gold.\n\r",
>     fnum(1000, buffer1), fnum(2000, buffer2));
>
> Modifying fnum should be simple then, just change buf_new to an argument:
>
> char *fnum(long number, char *buf_new)
> {
>    int index,index_new,rest;
>    char buf[16];
>
>    sprintf(buf, "%ld", number);
>    rest = strlen(buf)%3;
>
>    for (index = index_new = 0;index < strlen(buf); index++, index_new++)
>    {
>       if (index != 0 && (index - rest) %3 == 0 )
>       {
>          buf_new[index_new]=',';
>          index_new++;
>          buf_new[index_new] = buf[index];
>       }
>       else
>         buf_new[index_new] = buf[index];
>   }
>   buf_new[index_new] = '\0';
>   return buf_new;
> }
>
> --Palrich.
>
> ----- Original Message ----- 
> From: "Davion Kalhen" <[EMAIL PROTECTED]>
> To: <[email protected]>
> Sent: Wednesday, February 11, 2004 11:39 PM
> Subject: Re: Formatting numbers
>
>
> > Its not really a problem you can fix, persay. As in, getting it to work
your
> > way would be... uhh interesting? But, I was pondering over this and so I
> > talked to one of my Guru's to get an explination. And, now, with sprintf
it
> > does the last in first out thing, right? So the second one is process
first,
> > then the first. They are both pointing to the same static buffer, which
is
> > why you get the resaults you do. Not much you can do with this, except,
> > maybe have it return strdup(new_buf); but then you'd have to free it to
save
> > a massive memory leak. Eg.
> >
> > char *tmp, *tmp2;
> >
> > tmp = fnum(ch->steal);
> > tmp2 = fnum(ch->gold);
> > sprintf(buf, "%s %s\n\r", tmp, tmp2);
> >
> > Now, that doesn't really save time, or lines. You can also (Without
mods)
> >
> > int len;
> >
> > len = sprintf(buf, "%s", fnum(ch->steal) );
> > sprintf(buf+len, "%s", fnum(ch->gold) );
> >
> > Thats alittle better :), but, this is all I can throw up right now.
Sorry if
> > the function names are alittle off, but I deleted your post acsodently
and
> > can't find recient archives.
> >
> > Davion
>
>
> -- 
> ROM mailing list
> [email protected]
> http://www.rom.org/cgi-bin/mailman/listinfo/rom
>


Reply via email to