Question

I've got code that uses the function 'time' and other functions from 'time.h', and 'time' returns NULL every 'time' (haha although not funny, this is expensive on 'time' available for me to focus attention towards such) such is re-executed. It is strange in the fact that this only began yesterday. Previous usage of the same function in similar but lacking (I've been adding to it) code proved okay. The following is the C89 code:

#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);
    }
}
Was it helpful?

Solution 2

You need to allocate memory for the time() function to store the result if you want to provide it as a parameter. Either declare the variable on the stack or call malloc(). You can also retrieve the returned value if you give NULL as a parameter.

time_t current_time_since_epoch;
time(&current_time_since_epoch);
// or
current_time_since_epoch = time(NULL);
// or
time_t* timePtr = (time_t*) malloc(sizeof(time_t));
time(timePtr);
// ...
free(timePtr);

More info on the function time() prototype here

OTHER TIPS

When you pass the address of a time_t to time() it stores the result at that address. Since you didn't allocate any memory to store the result (all you did was declare an uninitialized pointer), you're getting undefined behavior. Just pass NULL to time and it will return the value.

time_t current_time_since_epoch = time(NULL);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top