C++我不知道的东西

C++我不知道的东西,c++,datetime,C++,Datetime,在linux环境中,我有一些代码如下: 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 => {" <<

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

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时 输出为: 缓冲区=>{20180718} n=>0

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

您正在尝试在代码中写入超过10个字符限制的字符

标准:1531903802的strftime输出为2018071817。 这就是为什么你的n是0

发件人:

返回值

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


当我在mac下运行代码时,一切正常。我将那个纪元粘贴到,它返回为GMT:2018年7月18日星期三08:50:02,那么18是正确的?!我认为缓冲区应该是20180716。为什么?是的,这就是问题所在,为什么你认为应该是这样?你要写的最大字节数太小了。您需要std::strftimebuffer,11,%Y%m%d%H,t来避免n==0。缓冲区=>{2018071808},n=>10是正确的。对不起,我认为缓冲区应该是2018071816,可能不同区域的值不同。