localtime_s()及asctime_s使用中遇到的结构体与指针的问题

今天在写数据结构时需要用到一个获取时间的函数,这个函数的参数传递费了我老半天时间;最终发现是一个结构体指针上的问题。

struct tm {
   int tm_sec;         /* 秒,范围从 0 到 59                */
   int tm_min;         /* 分,范围从 0 到 59                */
   int tm_hour;        /* 小时,范围从 0 到 23 */
   int tm_mday;        /* 一月中的第几天,范围从 1 到 31                    */
   int tm_mon;         /* 月份,范围从 0 到 11                */
   int tm_year;        /* 自 1900 起的年数                */
   int tm_wday;        /* 一周中的第几天,范围从 0 到 6                */
   int tm_yday;        /* 一年中的第几天,范围从 0 到 365 */
   int tm_isdst;       /* 夏令时                        */   
};//这是tm的结构体

/*以下定义的是结构体指针,另一个直接定义结构体,两者进行对比。*/

#include<time.h>
#include<stdio.h>
#include<stdlib.h>
int main(void) {
 time_t now;
 char S[32];
 struct tm* timeinfo= (tm*)malloc(sizeof(tm));/*结构体指针timeinfo必须初始化,给他分配一个动态空间,这是关键点,一定要动态分配空间不然会报错(使用未初始化的内存(timeinfo)*/
 
 
 time(&now);//time()函数是把一个正整数放进t所在的地址里,这个正整数是1970年1月1日00:00:00(UTC)开始,到目前为止经过的秒数。此处便是放进now中
 localtime_s(timeinfo,&now);/*使用localtime函数把秒数时间now转换为本地时间以tm结构体保存,并把tm结构体地址储存到timeinfo当中

这个函数中的timeinfo为指针*/
 asctime_s(S, timeinfo);/*S为之前定义的字符串数组,用于存访asctime函数将tm结构体中储存的时间转换的字符串*/
 printf("当前日期为: %s",S);
 return 0;
}

————————————————————————华丽分割线来一波————————

int main(void) {
 time_t now;
 char S[32];
 struct tm timeinfo ;//此处和上面的不同之处就是直接定义了结构体而不是指针,系统会默认初始化
 time(&now);
 localtime_s(&timeinfo,&now);//括号里的timeinfo必须加取值符
 asctime_s(S, &timeinfo);//这里也是加取值符
 printf("当前日期为: %s",S);
 return 0;
}
原文地址:https://www.cnblogs.com/ArnoldSchwarzenegger/p/11908229.html