时间不会在C中更新

时间:2015-04-16 18:49:12

标签: c date time

我遇到了一个非常奇怪的问题。我的时间根本没有变化,而且它总是在同一时间打印日志文件。这是一个覆盖最后一次的函数,应该返回新的函数:

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;

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

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

提前感谢您的帮助

修改

让我的节目与睡眠(5000)小睡,@ nos和@Weather Vane是正确的,它的全部是关于已经过去的时间(在我的问题的背景下更有趣:D)。我们可以关闭这张票,谢谢大家的帮助。

1 个答案:

答案 0 :(得分:1)

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

请考虑使用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的粒度也意味着无法报告小的时差。