我不知道的C ++ strftime

时间:2018-07-18 10:11:39

标签: c++ datetime

在linux env中,我有一些如下代码:

std::string SecondsToDate10String(time_t seconds) {
    struct tm* t = localtime(&seconds);
    char buffer[100] = {'\0'};
    auto n = std::strftime(buffer, 10, "%Y%m%d%H", t);
    std::cout << "buffer => {" << buffer << "}" << std::endl;
    std::cout << "n => " << n << std::endl;
    return std::string(std::begin(buffer), std::begin(buffer) + 10);
}

当秒= 1531903802 输出是: buffer => {20180718} n => 0

我认为缓冲区应该是2018071816。 为什么?

1 个答案:

答案 0 :(得分:1)

您正在尝试写超出限制的字符(在您的代码中为10个字符)

std:strftime

1531903802输出为2018071817。 这就是为什么您的n为0的原因。

来自std::strftime

  

返回值

     

写入str指向的字符数组的字节数   不包括成功时终止的'\ 0'。 如果达到计数   在存储整个字符串之前,返回``0''并   内容未定义