我遇到了一个非常奇怪的问题。我的时间根本没有变化,而且它总是在同一时间打印日志文件。这是一个覆盖最后一次的函数,应该返回新的函数:
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)。我们可以关闭这张票,谢谢大家的帮助。
答案 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
的粒度也意味着无法报告小的时差。