[R-pkg-devel] replacements of sprintf in compiled code

Bill Dunlap w||||@mwdun|@p @end|ng |rom gm@||@com
Sat Jan 21 16:52:48 CET 2023


Even Microsoft added snprintf to Visual C++ in 2015 (not that that matters
for R).

-Bill

On Sat, Jan 21, 2023 at 2:47 AM Duncan Murdoch <murdoch.duncan using gmail.com>
wrote:

> On 21/01/2023 5:33 a.m., Holger Hoefling wrote:
> > Hi,
> >
> > thanks for the tip! Is that available everywhere or do I need to set
> > compiler requirements?
>
> You shouldn't need any special requirements.  I think this was
> standardized in C99, which is supported by default in R.  Not sure which
> C++ version adopted it, but it's available there too.
>
> Duncan Murdoch
>
> >
> > Best
> >
> > Holger Hoefling
> >
> > On Sat, Jan 21, 2023 at 11:27 AM Duncan Murdoch
> > <murdoch.duncan using gmail.com <mailto:murdoch.duncan using gmail.com>> wrote:
> >
> >     On 21/01/2023 5:15 a.m., Holger Hoefling wrote:
> >      > Hi,
> >      >
> >      > In my recent re-submission with a bug-fix of the hdf5r package, I
> >     got a new
> >      > set of warnings from the compiler, one being that I shouldn't be
> >     using
> >      > 'sprintf'.
> >      >
> >      > Is there a simple replacement that I can use?
> >
> >     You should use snprintf() which has an extra argument to state the
> size
> >     of the buffer receiving the string.  For example,
> >
> >        char text[32];
> >        sprintf(text, "%.4g", value);
> >
> >     could be written as
> >
> >        char text[32];
> >        snprintf(text, 32, "%.4g", value);
> >
> >     This will write a string with at most 31 characters before the NUL at
> >     the end, and avoids the possibility of a buffer overrun.
> >
> >     Duncan Murdoch
> >
>
> ______________________________________________
> R-package-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>

	[[alternative HTML version deleted]]



More information about the R-package-devel mailing list