在 C 中创建 get_time() 函数时出现问题

Problems creating a get_time() function in C

我有这个简单的功能:

char*
get_time()
{
    char *buffer = malloc(sizeof(char)*10); /* HOW TO FREE IT ? */
    time_t rawtime;
    struct tm * timeinfo;

    time(&rawtime);
    timeinfo = localtime(&rawtime);
    strftime(buffer,10,"%H:%M:%S",timeinfo);

    return buffer;
}

问题出在 strftime() 上,它需要 char* 而我不能 free(buffer); 返回他的内容。我能做什么?

我使用函数的宏:

#define log_info(msg) printf("%s [INFO ] - %s\n",get_time(), (msg))

像这样

static char g_buffer[10];                                                      

#define log_info(msg)                               \                          
    do {                                            \                          
    get_time();                                     \                          
    printf("%s [INFO ] - %s\n", g_buffer, (msg));   \                          
    g_buffer[0] = '[=10=]';                             \                          
    } while (0)                                                                

static int get_time()                                                          
{                                                                              
    time_t rawtime;                                                            
    struct tm * timeinfo;                                                      

    time(&rawtime);                                                            
    timeinfo = localtime(&rawtime);                                            
    strftime(g_buffer,sizeof(g_buffer),"%H:%M:%S",timeinfo);                   

    return 0;                                                                  
}                                                                              

int main(void) {                                                               
    log_info("test");                                                          
    return 0;                                                                  
} 

但是不需要宏,函数就可以了

对于可变大小的字符串,您别无选择,只能让调用者分配并传入缓冲区。但是对于像这样的固定大小,你可以使用一个结构:

struct mytime {
    char buf[12];
}

struct mytime get_time() {
    struct mytime r;
    . . .
    strftime(r.buf, 10, "%H:%M:%S", timeinfo);
    return r;
}