繁体   English   中英

将std :: chrono :: system_clock :: time_point :: min()转换为字符串时,无效的空指针错误

[英]Invalid null pointer error when converting std::chrono::system_clock::time_point::min() to string

我正在Nicolai M. Josuttis的“ C ++标准库(第二版)”中,第152-153页中的示例,该示例详细说明了打印std::chrono::system_clock的时代,当前时间,最小和最大时间的示例std::chrono::system_clock是C ++ 11中引入的。

我正在使用Microsoft Visual Studio 2012,并且由于无效的空指针而在<xstring>触发了一个断言。 在设置tp = std::chrono::system_clock::time_point::min();之后,在以下代码的std::string ts = std::ctime( &t )行中发生这种情况tp = std::chrono::system_clock::time_point::min();

#include <chrono>
#include <ctime>
#include <string>
#include <iostream>

std::string asString( const std::chrono::system_clock::time_point& tp )
{
    std::time_t t = std::chrono::system_clock::to_time_t( tp );
    std::string ts = std::ctime( &t );
    ts.resize( ts.size()-1 );
    return ts;
}

int main()
{
    std::chrono::system_clock::time_point tp;
    std::cout << "epoch: " << asString(tp) << std::endl;

    tp = std::chrono::system_clock::now();
    std::cout << "now: " << asString(tp) << std::endl;

    tp = std::chrono::system_clock::time_point::min();
    std::cout << "min: " << asString(tp) << std::endl;

    tp = std::chrono::system_clock::time_point::max();
    std::cout << "max: " << asString(tp) << std::endl;

    return 0;
}

这是由于Dinkumware在<chrono>库中的实现错误,还是书中的错字/错误? 我一次又一次地检查了书中给出的代码,以查看是否将其错误地复制了出来,但事实并非如此。 对于提供的任何见解,我将不胜感激。

看起来std::ctime返回NULL,表示不正确的t值。 可能是因为对asString的调用使用了无法以time_t类型表示的time_point值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM