jjzjj

vsnprintf_s

全部标签

c++ - 为什么相同的 vsnprintf 代码在 Windows (MSVC) 和 Unix (Clang) 上输出不同

在Unix(Clang3.8.1)上,此代码输出:6:328:a8e在Windows(MSVC19.00.24215.1)上,此代码输出:6:123456:a12345e#include#includestaticstd::stringgetFormattedString(constchar*fmt,va_listap){intcount=vsnprintf(NULL,0,fmt,ap)+1;std::cout有趣的是,它们都得到了正确的计数,但在我的Linux和OSX机器上,这段代码输出了错误的结果。这是什么原因造成的?我在某处招致了UB吗? 最佳答案

c++ - 错误的 vsnprintf 输出

我有以下功能:voidraiseError(constchar*msg,...){va_listap;va_start(ap,msg);//usevariablearglistintsize=vsnprintf(nullptr,0,msg,ap);std::vectors(size+1,0);vsnprintf(s.data(),size,msg,ap);va_end(ap);errorString=std::string(s.data()));}当我打电话raiseError("Filenotfoundin:","a","b");第一个vsnprintf调用(计算最终字符串大小)返回

c++ - 使用 secure _vsnprintf_s 获取所需的缓冲区长度

我正在尝试更新一些“遗留”代码以符合MSVC的最新安全更新,并且在从_vsnprintf迁移到_vsnprintf_s时遇到了一些问题。特别是,我在调用_vsnprintf时使用空缓冲区和零计数/长度,获取结果,分配所需大小的缓冲区(返回值+1),然后使用新分配的缓冲区和已知正确的大小再次调用_vsnprintf:size_tlength=_vsntprintf(nullptr,0,mask,params);TCHAR*final=newTCHAR[length+1];_vsntprintf(final,length+1,mask,params);此行为是documentedonMSD

c++ - vsnprintf_s 调用后是否需要 va_end?

MSDN显示vsnprintf_s的示例代码片段://crt_vsnprintf_s.cpp#include#includevoidFormatOutput(LPCSTRformatstring,...){intnSize=0;charbuff[10];memset(buff,0,sizeof(buff));va_listargs;va_start(args,formatstring);nSize=vsnprintf_s(buff,_countof(buff),_TRUNCATE,formatstring,args);printf("nSize:%d,buff:%s\n",nSize,

【C语言】vsnprintf函数的使用

标题【C语言】vsnprintf函数的使用提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录标题【C语言】vsnprintf函数的使用前言一、vsnprintf是什么?二、例子1.示例12.示例2总结前言`在学习stm32串口打印的时候遇到这个vsnprintf函数unsignedcharUsartPrintfBuf[296]; va_listap; unsignedchar*pStr=UsartPrintfBuf; va_start(ap,fmt); vsnprintf((char*)UsartPrintfBuf,sizeof(UsartPrintfBuf),fmt,

windows - MinGW g++ : Multiple definition of vsnprintf when using to_string

我刚开始使用适用于Windows的MinGW。尝试使用创建可执行文件时g++a.cpp-oa.exe-std=c++14对于下面的代码:#includeusingnamespacestd;intmain(){stringx=to_string(123);return0;}我收到以下错误:C:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../libmingwex.a(vsnprintf.o):(.text+0x0):multipledefinitionofvsnprintfC:\Users\..\Local\Temp\cc4sJDvK.o:c:/m

c - Unix 到 Windows : Alternative to vsnprintf to determine length?

我目前正在将我们的一个Linux库的代码转换为WindowsDLL。在这个库中,我有一个函数以printf方式获取最后一个参数(格式字符串,然后省略号)。在此函数中,我使用vsnprintf来格式化提供的参数。因为我想知道我是否可以将最终字符串塞进一个小缓冲区,或者我是否必须分配内存,我有兴趣确定格式化字符串的“将是长度”。为此,我目前正在像这样使用vsnprintf(显然是示例代码):#include#include#includevoidfoo(constchar*fmt,...){intlen=0;va_listap;va_start(ap,fmt);len=vsnprintf(

c++ - 从哪个版本的 Visual Studio 开始,vsnprintf moSTLy 符合标准?

根据Microsoft'sdocumentationforvsnprintf,该函数是C(++)运行时库的一部分,至少从VisualStudio2003版开始。intvsnprintf(char*buffer,//Storagelocationforoutputsize_tcount,//Maximumnumberofcharacterstowriteconstchar*format,//Formatspecificationva_listargptr)//Pointertolistofotherarguments我在问:vsnprintf是哪个版本的VisualStudiox86和x