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