Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为_snprintf/_snwprintf的va_列表版本预计算字符串长度_C++_String - Fatal编程技术网

C++ 为_snprintf/_snwprintf的va_列表版本预计算字符串长度

C++ 为_snprintf/_snwprintf的va_列表版本预计算字符串长度,c++,string,C++,String,是否有以下代码的va_列表样式版本可以安全地执行非截断的sprintf: // format a char buffer int size = 1 + _snprintf(NULL, 0, "%d", 132); std::vector<char> buffer (size); sprintf_s(&buffer[0], buffer.size (), "%d", 132); // format a wchar_t buffer int wsize = 1 + _snwpr

是否有以下代码的va_列表样式版本可以安全地执行非截断的sprintf:

// format a char buffer
int size = 1 + _snprintf(NULL, 0, "%d", 132);
std::vector<char> buffer (size);
sprintf_s(&buffer[0], buffer.size (), "%d", 132);

// format a wchar_t buffer
int wsize = 1 + _snwprintf(NULL, 0, L"%d", 132);
std::vector<wchar_t> wbuffer (wsize);
swprintf_s(&wbuffer[0], wbuffer.size (), L"%d", 132);
//格式化字符缓冲区
int size=1+\u snprintf(NULL,0,“%d”,132);
std::向量缓冲区(大小);
sprintfs(&buffer[0],buffer.size(),%d',132);
//格式化wchar\t缓冲区
int wsize=1+\u snwprintf(NULL,0,L“%d”,132);
std::向量wbuffer(wsize);
swprintf_s(&wbuffer[0],wbuffer.size(),L“%d”,132);

从文档和实验中我可以看出,所有的_vsnprintf函数都不会返回长度计算,只会截断或生成错误。有其他选择吗?

Visual Studio提供了
\u vscprintf
函数来检查存储结果字符串所需的缓冲区量。

我想这是使用Microsoft的编译器和运行时?ANSI标准vsprintf和相关函数都具有“正确”的行为,即返回没有截断的长度。(当然,这不是对你的安慰,是的,没错,微软编译器。我不是C程序员,但我认为ANSI C <代码> vStAMTF< /COD>函数返回了实际存储在缓冲区中的字符数,而不是没有截断的存储的数字。如果这是C++,你考虑过使用std::stringstream吗?是的,我已经看过stringstream了。这当然是可能的,但是像所有的流式I/O一样,它很难使用,尤其是与格式说明符一起使用。