C++ 奇怪的mktime行为-如果将返回值指定给变量,则会发生变化

C++ 奇怪的mktime行为-如果将返回值指定给变量,则会发生变化,c++,timezone,mktime,C++,Timezone,Mktime,我正在试验一个奇怪的mktime()函数行为。当我指定函数返回的值时,输入参数的值是一,而当我不指定时,值是不同的 我已经知道mktime()会调整struct tm input参数的值,但实际情况不同,让我们看看相应输出的代码: 第一个代码 #include <iostream> #include <time.h> using namespace std; int main(int argc, char** argv) { struct tm cT;

我正在试验一个奇怪的mktime()函数行为。当我指定函数返回的值时,输入参数的值是一,而当我不指定时,值是不同的

我已经知道mktime()会调整struct tm input参数的值,但实际情况不同,让我们看看相应输出的代码:

第一个代码

#include <iostream>
#include <time.h>

using namespace std;

int main(int argc, char** argv) {
    struct tm cT;
    strptime("31/07/2014 16:54:00", "%d/%m/%Y%n%T", &cT);
    mktime(&cT);

    cout << "Current Time: "  << cT.tm_mday << "/" << cT.tm_mon + 1 << "/" << cT.tm_year + 1900 << " " << cT.tm_hour << ":" << cT.tm_min << ":" << cT.tm_sec << endl;

}
#include <iostream>
#include <time.h>

using namespace std;

int main(int argc, char** argv) {
    struct tm cT;
    strptime("31/07/2014 16:54:00", "%d/%m/%Y%n%T", &cT);
    time_t t = mktime(&cT);

    cout << "Current Time: "  << cT.tm_mday << "/" << cT.tm_mon + 1 << "/" << cT.tm_year + 1900 << " " << cT.tm_hour << ":" << cT.tm_min << ":" << cT.tm_sec << endl;

}
#包括
#包括
使用名称空间std;
int main(int argc,字符**argv){
struct-tm-cT;
strtime(“2014年7月31日16:54:00”,%d/%m/%Y%n%T”,&cT);
mktime&cT;

cout这是一个典型的忘记初始化变量的情况。具体来说,您需要使用适当的值初始化
cT
变量,至少所有不会被
strptime
触及的字段(
strptime
只会设置与格式字符串中的输入字段描述符相对应的字段)

例如:


time.h
已被弃用。请使用
ctime
。或
chrono
@chris,谢谢您提供的信息!但他正在输出strtime()的所有值应该填充。那么未初始化的数据在哪里?输出不关心tm_isdst。@RemyLebeau:
tm_isdst
,它控制夏令时是否生效。
mktime
将根据此字段的值表现不同。如果未初始化,它可以有任何值。不管怎样,我现在就知道了。
strtime()
没有填充
tm_isdst
但是
mktime()
查看它,所以需要手动初始化。太好了!我只是用cT={0}初始化变量,之后一切都很顺利。非常感谢!
struct tm cT = { 0 };
cT.tm_isdst = -1;
strptime("31/07/2014 16:54:00", "%d/%m/%Y%n%T", &cT);