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吗?
事实证明这个问题几乎与以下问题完全相同:
答案摘要:
用于_vscprintf计算缓冲区应该有多大,然后用于vsnprintf_s实际填充它。