Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将std::chrono::system_clock::time_point::min()转换为字符串时出现无效的空指针错误 我在Nicolai M. Josuttis的“C++标准库(第二版)”页152-153中详细介绍了一个例子,它是打印 STD::C++中的Cytho::StulySythCyth 11的时间、当前时间、最小和最大时间。_C++_Visual Studio 2012_C++11_Stl_Chrono - Fatal编程技术网

将std::chrono::system_clock::time_point::min()转换为字符串时出现无效的空指针错误 我在Nicolai M. Josuttis的“C++标准库(第二版)”页152-153中详细介绍了一个例子,它是打印 STD::C++中的Cytho::StulySythCyth 11的时间、当前时间、最小和最大时间。

将std::chrono::system_clock::time_point::min()转换为字符串时出现无效的空指针错误 我在Nicolai M. Josuttis的“C++标准库(第二版)”页152-153中详细介绍了一个例子,它是打印 STD::C++中的Cytho::StulySythCyth 11的时间、当前时间、最小和最大时间。,c++,visual-studio-2012,c++11,stl,chrono,C++,Visual Studio 2012,C++11,Stl,Chrono,我正在使用Microsoft Visual Studio 2012,由于无效的空指针,在中触发了一个断言。在设置tp=std::chrono::system\u clock::time\u point::min()后,在下面代码中的行std::string ts=std::ctime(&t)上会发生这种情况 #包括 #包括 #包括 #包括 标准::字符串关联(常数标准::时钟::系统时钟::时间点和tp) { std::time\u t=std::chrono::system\u clock::

我正在使用Microsoft Visual Studio 2012,由于无效的空指针,在
中触发了一个断言。在设置
tp=std::chrono::system\u clock::time\u point::min()后,在下面代码中的行
std::string ts=std::ctime(&t)
上会发生这种情况

#包括
#包括
#包括
#包括
标准::字符串关联(常数标准::时钟::系统时钟::时间点和tp)
{
std::time\u t=std::chrono::system\u clock::to\u time\u t(tp);
std::string ts=std::ctime(&t);
ts.resize(ts.size()-1);
返回ts;
}
int main()
{
标准::时钟::系统时钟::时间点tp;

std::cout它看起来像
std::ctime
返回NULL,这表示一个不正确的
t
值。可能是因为对
asString
的调用使用了
time\u point
类型中无法表示的
time\u t
值。

那么,检查错误如何?
ctime
有一个定义良好的接口e、 为什么会是这种情况呢?在Dinkumware的实现中,
time\u t
\u int64
(一个64位有符号整数)的类型定义,所以当
std::chrono::system\u clock::time\u point::min()
结果为负
时间
我找不到任何地方表明
std::ctime
的参数必须是指向非负
时间
值的指针?
min()
返回最短持续时间。如果它是1纳秒,它可能无法在
时间\u t
中表示。在
到\u时间\u t()之后的
t
值是什么?
?调试器声明
t=-922337203684
,我猜可能太大(绝对值)对于
std::ctime
?是的,我想
ctime
无法处理此问题。我不确定MS VC的实现,但通常时间t是从1970年1月1日起经过的秒数。对于“t”的值,它类似于公元前28000年。
#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;
}