std :: strftime返回值
我想我读的地方,如果我通过一个nullptr到std::strftime,该函数将返回所需的缓冲区大小。事实上,下面的代码工作得很好众多Linux系统上,我试图在(与VS尽管编译时):std :: strftime返回值
#include <iostream> #include <ctime>
#include <string>
int main()
{
std::time_t time{};
std::tm const * ltime = std::localtime(&time);
const char * formatString = "%Y-%b-%d";
//allocate buffer of appropriate size
auto requiredSize = 1 + std::strftime(nullptr, 50, formatString, ltime);
std::cout << "Required buffer size:" << requiredSize << "\n";
//Format time to string
std::string buff(requiredSize, ' ');
std::strftime(&buff[0], requiredSize, formatString, ltime);
std::cout << buff << std::endl;
}
但是,我无法找到我的原始来源或任何其他文件是会指定这种行为。所以我的问题是:
- 在哪些系统/编译器/标准库实现(如果有)这是一个保证的行为?
- 我在哪里可以找到相应的文档?
编辑:我添加e标记,因为我已经看到了等价的C代码和至少用gcc /克相同的结果++(或更确切地说的glibc /的libstdC++)std::strftime
可能只是针对C-别名无论如何,功能strftime
。
回答:
据我所知和其他人在评论中写道,根据ISO C或C++标准,上面的代码很可能是未定义的行为,并且就我自己的实验而言,在使用VS2015编译时会崩溃。
然而,就glibc的来讲,@rici是在现货:
从The GNU C Library文档:
如果s是一个空指针,strftime的实际上并没有写任何东西,但而是返回它将写入的字符数。
以上是 std :: strftime返回值 的全部内容, 来源链接: utcz.com/qa/263328.html