将long int转换为const time_t

Nej*_*lof 4 c++ ctime

我有变量tmit : long tmit;. 我在这段代码中遇到错误:

printf("Time: %s",ctime(&tmit));
Run Code Online (Sandbox Code Playgroud)

并且错误说:Cannot convert 'long int*' to 'const time_t* {aka const long long int*}' for argument '1' to 'char* ctime(const time_t*)' 我的问题是,如果我想看到日期,如何将long转换为time_t而不会丢失任何有关时间的信息或如何更改此代码.我正在研究这个答案,但我得到了错误.

eer*_*ika 5

您不能简单地将一种类型的指针“转换”为指向不兼容对象类型的指针。

您想要做的是创建另一种类型的对象,然后使用对象类型之间的隐式转换对其进行初始化,最后将指针传递给新创建的对象:

std::time_t t = tmit;
ctime(&t);
Run Code Online (Sandbox Code Playgroud)


Bau*_*gen 5

一般情况下,你不能因为std::time_t和整数之间没有任何合理的联系long.

在您的特定系统上,std::time_t是一个long long,所以你可以这样做

std::time_t temp = tmit;
Run Code Online (Sandbox Code Playgroud)

然后使用temp的地址.请注意,这不需要在编译器或编译器版本之间移植(尽管我不希望后者破坏).

值得检查保存的内容是否以合理的方式tmit被函数解释ctime,因为您没有告诉我们它来自何处.

根据tmit它的生成方式,使用a std::time_t tmit而不是long tmitget get 也可能是一个好主意,从而完全消除了这个转换问题.

如果您不必使用旧的C风格时间工具,请查看C++ 11 <chrono>标头.