[R-pkg-devel] replacements of sprintf in compiled code
Duncan Murdoch
murdoch@dunc@n @end|ng |rom gm@||@com
Sat Jan 21 11:47:02 CET 2023
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
>
More information about the R-package-devel
mailing list