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

时间:2013-05-19 09:52:54

标签: c++ visual-studio-2012 c++11 stl chrono

我在Nicolai M. Josuttis的“C ++标准库(第二版)”,第152-153页中举了一个例子,其中详细介绍了打印{{{的时代,当前时间,最小和最大时间的示例。 1}}在C ++ 11中引入。

我正在使用Microsoft Visual Studio 2012,并且由于空指针无效而在std::chrono::system_clock中触发了断言。设置<xstring>

后,会在以下代码中的std::string ts = std::ctime( &t )行上发生这种情况
tp = std::chrono::system_clock::time_point::min();

这是由于Dinkumware在#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; } 库中的实现错误,还是书中的错字/错误?我一遍又一遍地看过书中给出的代码,看看我是否错误地将其复制出来,但事实并非如此。我非常感谢任何见解。

1 个答案:

答案 0 :(得分:1)

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