我正在跟随Nicolai M. Josuttis的《C++标准库(第二版)》第152-153页中的示例,该示例详细介绍了如何打印C++11引入的std::chrono::system_clock
的时代、当前时间、最小和最大时间。
我正在使用Microsoft Visual Studio 2012,并在<xstring>
中触发了一个断言,原因是无效的空指针。这发生在下面的代码中的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>
库中实现错误,还是书中的错别字/错误?我一遍又一遍地检查了书中给出的代码,看是否我复制错误,但似乎并非如此。如果有任何见解,我将不胜感激。
ctime
有一个定义良好的接口。 - Kerrek SB