我有使用'time'函数的代码和'time.h'中的其他函数,'time'每隔'时间'返回NULL(哈哈虽然不好笑,但是'时间'可用于我把注意力集中在这样的事情上,这样就重新执行了。奇怪的是,这只是昨天才开始的。以前在相似但缺乏(我一直在添加它)代码中使用相同功能的代码证明是可以的。以下是C89代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1
typedef struct tm tm;
int logf(char input_string[])
{
time_t* current_time_since_epoch;
time(current_time_since_epoch);
if (current_time_since_epoch == NULL)
{
printf("'time' returned NULL.\n");
return EXIT_FAILURE;
}
tm* current_time_calandar_time = localtime(current_time_since_epoch);
if (current_time_calandar_time == NULL)
{
printf("'localtime' returned NULL.\n");
return EXIT_FAILURE;
}
char current_time_textual_representation[20];
strftime(current_time_textual_representation, 20, "%d-%m-%Y %H:%M:%S", current_time_calandar_time);
printf("%s\n", current_time_textual_representation);
printf("%s\n", input_string);
return EXIT_SUCCESS;
}
int main(void)
{
int check_logf = logf("Hello.");
if (check_logf == 0) exit(EXIT_SUCCESS);
else
{
printf("'logf' returned EXIT_FAILURE.\n");
exit(EXIT_FAILURE);
}
}
答案 0 :(得分:2)
当您将time_t
的地址传递给 time()
时,会将结果存储在该地址。由于您没有分配任何内存来存储结果(您所做的只是声明了一个未初始化的指针),因此您将获得未定义的行为。只需将NULL
传递给time
,它就会返回值。
time_t current_time_since_epoch = time(NULL);
答案 1 :(得分:1)
如果要将结果作为参数提供,则需要为time()
函数分配内存以存储结果。要么声明堆栈上的变量,要么调用malloc()
。如果您将NULL
作为参数,也可以检索返回的值。
time_t current_time_since_epoch;
time(¤t_time_since_epoch);
// or
current_time_since_epoch = time(NULL);
// or
time_t* timePtr = (time_t*) malloc(sizeof(time_t));
time(timePtr);
// ...
free(timePtr);
有关函数time()
原型here