vsnprintf_s是否已弃用vsnprintf?

abe*_*nky 6 c printf visual-studio-2010

在我的代码(严格的C,而不是C++)中,我用这种方式使用vsnprintf:

char* buf = NULL;
size_t sz;
sz = vsnprintf( buf, 0, format, args); // Ask vsnprintf how big a buffer we need

buf = (char*) malloc(sz + 1);
vsnprintf( buf, sz, format, args); // Now actually fill the buffer
/* Use buf in a dialog box... then: */
free(buf);
Run Code Online (Sandbox Code Playgroud)

但MS Visual C++(MSVS10)编译器警告:

warning C4996: 'vsnprintf': This function or variable may be unsafe. Consider using vsnprintf_s instead. 
Run Code Online (Sandbox Code Playgroud)

但是,vsnprintf_s不能有漂亮的功能,当您为缓冲区传递NULL它将描述多少数据它打印.相反,它被记录为返回-1.

我觉得我vsnprintf通过确定必要的尺寸以安全的方式使用,并且建议的更换,vsnprintf_s完全不一样.

我错过了更好/更聪明的使用方法vsnprintf_s吗?

abe*_*nky 4

事实证明这个问题几乎与以下问题完全相同:

计算 sprintf() 缓冲区的大小

答案摘要:

用于_vscprintf计算缓冲区应该有多大,然后用于vsnprintf_s实际填充它。