直接设置 struct tm 属性的值不起作用
Directly setting values of struct tm's attributes not working
为什么 asctime(ptr)
return 什么都没有?结构的所有变量都有值。有人可以解释为什么会这样吗?
我也试过使用strftime
,但结果是一样的。
#include <iostream>
#include <ctime>
#include <new>
//#include <cstdio>
using namespace std;
int main(int argc,char *argv[])
{
struct tm *ptr=new struct tm;
//char buf[50];
ptr->tm_hour=0;
ptr->tm_mon=0;
ptr->tm_year=0;
ptr->tm_mday=0;
ptr->tm_sec=0;
ptr->tm_yday=0;
ptr->tm_isdst=0;
ptr->tm_min=0;
ptr->tm_wday=0;
cout << asctime(ptr);
//strftime(buf,sizeof(char)*50,"%D",ptr);
//printf("%s",buf);
return 0;
}
下面的程序有效。用 1 去掉 0 就可以了。
struct tm *ptr = new struct tm();
char buf[50];
ptr->tm_hour = 1;
ptr->tm_mon = 1;
ptr->tm_year = 1;
ptr->tm_mday = 1;
ptr->tm_sec = 1;
ptr->tm_yday = 1;
ptr->tm_isdst = 1;
ptr->tm_min = 1;
ptr->tm_wday = 1;
cout << asctime(ptr)
这也有效:
ptr->tm_hour = 0;
ptr->tm_mon = 0;
ptr->tm_year = 0;
ptr->tm_mday = 1;
ptr->tm_sec = 0;
ptr->tm_yday = 0;
ptr->tm_isdst = 0;
ptr->tm_min = 0;
ptr->tm_wday = 0;
cout << asctime(ptr);
如果 struct tm
的任何成员超出其正常范围,则 asctime
的行为未定义。
特别是如果日历日小于 0,则行为未定义(某些实现将 tm_mday==0
视为前一个月的最后一天)。
查看 http://en.cppreference.com/w/cpp/chrono/c/asctime and http://en.cppreference.com/w/cpp/chrono/c/tm 了解更多详情。
为什么 asctime(ptr)
return 什么都没有?结构的所有变量都有值。有人可以解释为什么会这样吗?
我也试过使用strftime
,但结果是一样的。
#include <iostream>
#include <ctime>
#include <new>
//#include <cstdio>
using namespace std;
int main(int argc,char *argv[])
{
struct tm *ptr=new struct tm;
//char buf[50];
ptr->tm_hour=0;
ptr->tm_mon=0;
ptr->tm_year=0;
ptr->tm_mday=0;
ptr->tm_sec=0;
ptr->tm_yday=0;
ptr->tm_isdst=0;
ptr->tm_min=0;
ptr->tm_wday=0;
cout << asctime(ptr);
//strftime(buf,sizeof(char)*50,"%D",ptr);
//printf("%s",buf);
return 0;
}
下面的程序有效。用 1 去掉 0 就可以了。
struct tm *ptr = new struct tm();
char buf[50];
ptr->tm_hour = 1;
ptr->tm_mon = 1;
ptr->tm_year = 1;
ptr->tm_mday = 1;
ptr->tm_sec = 1;
ptr->tm_yday = 1;
ptr->tm_isdst = 1;
ptr->tm_min = 1;
ptr->tm_wday = 1;
cout << asctime(ptr)
这也有效:
ptr->tm_hour = 0;
ptr->tm_mon = 0;
ptr->tm_year = 0;
ptr->tm_mday = 1;
ptr->tm_sec = 0;
ptr->tm_yday = 0;
ptr->tm_isdst = 0;
ptr->tm_min = 0;
ptr->tm_wday = 0;
cout << asctime(ptr);
如果 struct tm
的任何成员超出其正常范围,则 asctime
的行为未定义。
特别是如果日历日小于 0,则行为未定义(某些实现将 tm_mday==0
视为前一个月的最后一天)。
查看 http://en.cppreference.com/w/cpp/chrono/c/asctime and http://en.cppreference.com/w/cpp/chrono/c/tm 了解更多详情。