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

时间:2015-04-06 16:32:00

标签: c c89

我有这个简单的功能:

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))

2 个答案:

答案 0 :(得分:0)

像这样的东西

static char g_buffer[10];                                                      

#define log_info(msg)                               \                          
    do {                                            \                          
    get_time();                                     \                          
    printf("%s [INFO ] - %s\n", g_buffer, (msg));   \                          
    g_buffer[0] = '\0';                             \                          
    } 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;                                                                  
} 

但是,并没有得到宏的需要,一个功能将完成这项工作

答案 1 :(得分:0)

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

struct mytime {
    char buf[12];
}

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