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

回到顶部