我可以在同一文件中使用来自 time.h 的两个 tm 结构吗?
Can I use two tm struct from time.h in the same file?
我正在尝试做一个图书借阅系统可以告诉用户他们有return这本书的日期。因为我必须使用数据来检查借阅次数是否超过限制。我尝试使用两个tm结构。
struct tm *Olddate;
struct tm *Newdate;
我在这样的结构之一中添加了天数
Newdate->tm_mday += 7;
当我尝试打印出这两个不同的结构时,输出在某种程度上是相同的。
printf("Current local time and date: %s", asctime(Olddate));
printf("Current new time and date: %s", asctime(Newdate));
输出:
Current local time and date: Tue May 17 21:37:16 2022
New time and date: Tue May 17 21:37:16 2022
最小可重现示例:
#include <stdio.h>
#include <time.h>
int main () {
time_t rawtime;
struct tm *Olddate;
struct tm *Newdate;
time( &rawtime );
Olddate = localtime(&rawtime);
Newdate = localtime(&rawtime);
Newdate->tm_mday += 7;
printf("Current local time and date: %s", asctime(Olddate));
printf("New time and date: %s", asctime(Newdate));
return 0;
}
localtime
函数 returns 指向静态数据的指针,因此该数据的内容可以在后续调用中被覆盖。
您应该改用 localtime_r
,它接受要填充的 struct tm
地址。
time_t rawtime;
struct tm Olddate;
struct tm Newdate;
time( &rawtime );
localtime_r(&rawtime, &Olddate);
localtime_r(&rawtime, &Newdate);
Newdate.tm_mday += 7;
printf("Current local time and date: %s", asctime(&Olddate));
printf("New time and date: %s", asctime(&Newdate));
如果您使用的是 MSVC,请改用 localtime_s
。
localtime_s(&Olddate, &rawtime);
localtime_s(&Newdate, &rawtime);
我正在尝试做一个图书借阅系统可以告诉用户他们有return这本书的日期。因为我必须使用数据来检查借阅次数是否超过限制。我尝试使用两个tm结构。
struct tm *Olddate;
struct tm *Newdate;
我在这样的结构之一中添加了天数
Newdate->tm_mday += 7;
当我尝试打印出这两个不同的结构时,输出在某种程度上是相同的。
printf("Current local time and date: %s", asctime(Olddate));
printf("Current new time and date: %s", asctime(Newdate));
输出:
Current local time and date: Tue May 17 21:37:16 2022
New time and date: Tue May 17 21:37:16 2022
最小可重现示例:
#include <stdio.h>
#include <time.h>
int main () {
time_t rawtime;
struct tm *Olddate;
struct tm *Newdate;
time( &rawtime );
Olddate = localtime(&rawtime);
Newdate = localtime(&rawtime);
Newdate->tm_mday += 7;
printf("Current local time and date: %s", asctime(Olddate));
printf("New time and date: %s", asctime(Newdate));
return 0;
}
localtime
函数 returns 指向静态数据的指针,因此该数据的内容可以在后续调用中被覆盖。
您应该改用 localtime_r
,它接受要填充的 struct tm
地址。
time_t rawtime;
struct tm Olddate;
struct tm Newdate;
time( &rawtime );
localtime_r(&rawtime, &Olddate);
localtime_r(&rawtime, &Newdate);
Newdate.tm_mday += 7;
printf("Current local time and date: %s", asctime(&Olddate));
printf("New time and date: %s", asctime(&Newdate));
如果您使用的是 MSVC,请改用 localtime_s
。
localtime_s(&Olddate, &rawtime);
localtime_s(&Newdate, &rawtime);