时间不会在 C 中更新

Time doesn't update in C

我遇到了一个很奇怪的问题。我的时间根本没有改变,它总是打印相同的时间来记录文件。这是一个覆盖上次的函数,应该return新的:

char * update_time(char *date)
{
    time_t timer;
    timer = time(&timer);
    struct tm* time_real;
    time_real = localtime(&timer);
    date = asctime(time_real);
    strftime(date, 26, "%Y.%m.%d %H:%M:%S", time_real);
    return date;
}

以下是我如何调用函数来获取新时间:

date = update_time(date);

在 main 函数中,我声明了一个指向 char 的指针,如下所示:

char *date = NULL;

并在每次需要获取新数据时调用该函数。更有趣的是,当我逐行调试我的程序时,我看到调试器 "see" char *data 的新值,但在结果文件中看不到(打印)它。

FIY 这是输出的 txt 文件:

2015.04.16 20:09:49:09S Program starts
2015.04.16 20:09:49:09S Opening file: a.txt
2015.04.16 20:09:49:09S New data retrieved
2015.04.16 20:09:49:09S Closing file: a.txt
2015.04.16 20:09:49:09S End of program

提前感谢您的帮助

编辑

让我的程序用 Sleep(5000) 小睡一下,@nos 和 @Weather Vane 是对的,它都是关于经过的时间(在我的问题的上下文中更有趣的是:D)。我们可以关闭这张票,谢谢大家的帮助。

注意:asctime 在 MSVC 示例中指出要弃用,因为它使用内部静态数组。

考虑改用 asctime_s,它的输出采用缓冲区参数。

如果您使用asctime,您必须在再次使用之前复制它的结果。除了直接使用之外记住返回的指针是没有用的。

更新

我看到一个错误:

date = asctime(time_real);                          // overwrites the pointer you passed 
trftimse(date, 26, "%Y.%m.%d %H:%M:%S", time_real); // passes the pointer provided by asctime
return date;                                        // that's NOT the arg you passed

因此该函数使用指向由 asctime 返回的静态内部字符串的指针,而不是您提供的那个。

你的问题说明了这一点

char *date = NULL;
date = update_time(date);

因此您正在将 NULL 指针传递给 strftime。它以前有效,因为对 asctime 的不相关调用用其内部静态指针替换了 NULL 指针。

但即使一切正确,如果程序在短时间内运行并完成,time 的粒度意味着无法报告小的时间差异。