As part of my assignment, I have been asked to construct a structure of command, which stores a list of executed commands. The instructions provided were:
typedef struct {
char *name;
struct tm time;
int code;
} Command;
Note: struct tm defined in <time.h>
I am having trouble accessing the time values stored in the struct tm time, which is stored inside of my Command structure.
My code is as follows:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <signal.h>
#include <string.h>
#include <time.h>
typedef struct command{
char* name;
struct tm *time;
int code;
} Command;
void add_log(Command command[], int return_code, char name[100]){
time_t current_time;
time(¤t_time);
command[0].code = return_code;
command[0].name = strdup(name);
command[0].time = localtime(¤t_time);
}
int main(){
Command command[10];
add_log(command, 0, "log");
printf("Printing return code\n%d\n", command[0].code);
printf("Printing command name\n%s\n", command[0].name);
char time_log[10];
if (strftime(time_log, 10, "%c", time)){
printf("\nPrinting time log\n");
puts(time_log);
}
else{
printf("FAILED");
}
return 0;
}
The error I am getting looks as follows:
tester.c: In function ‘main’:
tester.c:37:38: warning: passing argument 4 of ‘strftime’ from incompatible pointer type [-Wincompatible-pointer-types]
37 | if (strftime(time_log, 10, "%c", time)){
| ^~~~
| |
| time_t (*)(time_t *) {aka long int (*)(long int *)}
In file included from tester.c:8:
/usr/include/time.h:90:32: note: expected ‘const struct tm * restrict’ but argument is of type ‘time_t (*)(time_t *)’ {aka ‘long int (*)(long int *)’}
90 | const struct tm *__restrict __tp) __THROW;
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
Printing return code
0
Printing command name
log
FAILED
I am specifically focusing on the line note: expected ‘const struct tm * restrict’ but argument is of type ‘time_t (*)(time_t *)’ {aka ‘long int (*)(long int *)’}. If the fourth argument for the strftime is wrong in my case, could anyone please point out what the correct argument should be?