delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1997/10/15/09:16:24

Date: Wed, 15 Oct 1997 15:13:27 +0200 (MET DST)
Message-Id: <199710151313.PAA18129@login.eunet.no>
From: "Gisle Vanem" <giva AT bgnett DOT no>
To: djgpp AT delorie DOT com
Subject: Re: sprintf() string length?
MIME-Version: 1.0

Eli Zaretskii <eliz AT is DOT elta DOT co DOT il> said:

> On Tue, 14 Oct 1997, Peter Palotas wrote:
>
> > Is there a way to find out the length of the string that sprintf() will
> > generate, without writing it anywhere? i.e. if I want to dynamically
> > allocate the storage space for the string this would be very good (read
> > essential) to know!
>
> You could make a crude estimation by walking through the format string
> and assuming each % conversion specifier which doesn't have an
> explicit character count produces the maximum possible length.  A more
> accurate way would be to know the default length for each conversion
> letter (%s will need to get the length of the argument).

djgpp misses the _bprintf(),_vbprintf() functions some other vendors have.
These functions prevents buffer overflow and should solve Peters problem.
E.g:

char *dyn_sprintf (char *fmt, ...)
{
  char buf [10000];  /* or whatever size is absolute max */
  int len = _vbprintf (buf,sizeof(buf)-1,fmt,(&fmt)+1);
                                   /* ^ not sure if needed */
  return strdup(buf);
}

I might see if I could make such functions for djgpp (modifying doprint).


Gisle V.


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019