c - vsnprintf_s 是已弃用的 vsnprintf 的适当替代品吗?

标签 c visual-studio-2010 printf

在我的代码中(严格的 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);

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

warning C4996: 'vsnprintf': This function or variable may be unsafe. Consider using vsnprintf_s instead. 

但是,vsnprintf_s 有一个漂亮的功能,即当您为缓冲区传递 NULL 时,它会描述它将拥有多少数据打印。相反,它是 documented to return -1 .

我觉得我通过确定必要的大小以安全的方式使用 vsnprintf,并且推荐的替代品 vsnprintf_s 根本不一样。

我是否错过了使用 vsnprintf_s 的更好/更智能的方法??

最佳答案

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

Calculating the size of an sprintf() buffer

答案总结:

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

关于c - vsnprintf_s 是已弃用的 vsnprintf 的适当替代品吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17351874/

相关文章:

c - C 程序输出随机数

来自硬件工程师的 C 程序,几乎没有编码背景

c# - 用于数字的正确数据类型是什么

visual-studio-2010 - 如何在Visual Studio 2010上配置gtk

C 从 FILE* 打印文件路径

c - printf 中的三元运算符

c - 使用 gzprintf 进行高效的 gzip 写入

c - C连接值重新分配中的TCP/IP

visual-studio-2010 - Visual Studio 2010 不会重新加载打开的文件

c - Printf 有时会写入额外的字符