[Rd] use of buffers in sprintf and snprintf
Simon Urbanek
@|mon@urb@nek @end|ng |rom R-project@org
Fri May 31 04:20:51 CEST 2019
No, that will make it even worse since you'll be declaring a lot more memory that you actually have.
The real problem is that you're ignoring the truncation, so you probably want to use something like
if (snprintf(tempname, sizeof(tempname), "%s.%d", of1name, j) >= sizeof(tempname)) Rf_error("file name is too long");
BTW: most OSes systems have a path limits that are no lower than 256 so you should allow at least as much.
Cheers,
Simon
> On May 29, 2019, at 11:49 AM, jing hua zhao <jinghuazhao using hotmail.com> wrote:
>
> Dear R-developers,
>
> I am struggling with packaging with sprintf and snprintf() as the following WARNINGS from gcc 9.x,
>
> hap_c.c:380:46: warning: �%d� directive output may be truncated writing between 1 and 10 bytes into a region of size between 0 and 127 [-Wformat-truncation=]
> hap_c.c:392:46: warning: �%d� directive output may be truncated writing between 1 and 10 bytes into a region of size between 0 and 127 [-Wformat-truncation=]
>
> Essentially, I have
>
> #define MAX_FILENAME_LEN 128
> char of1name[MAX_FILENAME_LEN],of2name[MAX_FILENAME_LEN], tempname[MAX_FILENAME_LEN];
>
> ...
>
> snprintf(tempname,sizeof(tempname),"%s.%d", of1name, j);
>
> It looks I could get around with
>
>
> #define MAX_FILENAME_LEN 128
>
> #define MAX_FILENAME_LEN2 256
>
> char of1name[MAX_FILENAME_LEN],of2name[MAX_FILENAME_LEN], tempname[MAX_FILENAME_LEN2];
>
> ...
> snprintf(tempname,2*sizeof(tempname)+1,"%s.%d", of1name, j)
>
> It looks a bit waste of resources to me.
>
>
> Any idea will be greatly appreciated,
>
>
>
> Jing Hua
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
More information about the R-devel
mailing list