我的代码如下所示。它显示当前日期和 100 天后的日期。但是,我注意到结果是一样的。所以我想也许结构或变量的地址是相同的。
我把 "%p"
变量 now
、later
、lnow
和 tnow
,最下面的结果显示lnow
和tnow
的结构指针都是02B51AA0
,而变量later
和 now
有不同的地址。
现在,如果我将 lnow = localtime(&later)
移动到不同的位置,在第一个 switch 语句之后,然后地址发生变化并且它完美地工作。您能解释一下为什么会这样吗?
#include <stdio.h>
#include <time.h>
struct tm* tnow;
struct tm* lnow;
int main(void)
{
time_t now = time(NULL);
time_t later = now + 100*24*3600;
printf("%p\t%p\n", &now, &later);
lnow = localtime(&later);
tnow = localtime(&now);
printf("%p\t%p\n", lnow, tnow);
printf("%d.%d.%d\t", tnow->tm_year+1900, tnow->tm_mon+1, tnow->tm_mday);
switch (tnow->tm_wday)
{
case 0: puts("SUNDAY"); break;
case 1: puts ("MONDAY"); break;
case 2: puts("TUESDAY"); break;
default: puts("ELSE"); break;
}
printf("%d.%d.%d\t", lnow->tm_year+1900, lnow->tm_mon+1, lnow->tm_mday);
switch (lnow->tm_wday)
{
case 0: puts("SUNDAY"); break;
case 1: puts ("MONDAY"); break;
case 2: puts("TUESDAY"); break;
default: puts("ELSE"); break;
}
return 0;
}
结果:
0061FF2C 0061FF28
02B51AA0 02B51AA0
2017.12.8 ELSE
2017.12.8 ELSE
最佳答案
- 为什么要打印
now
和later
的地址?这些只是time_t
值,因此地址没有用。 localtime
返回一个指向内部缓冲区的指针 - 每次都相同,因此如果您想立即执行localtime
,则需要从中复制值时间。
关于c - 内存分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47708099/