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

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

最佳答案

类似这样的事情

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;                                                                  
} 

但是不需要宏,函数就可以完成这项工作

关于c - 在 C 中创建 get_time() 函数时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29475334/

相关文章:

c - 通过 C 访问 PrinterDriver 中的特殊数据(如双面打印)

c - 人们使用什么技术/策略在 C(不是 C++)中构建对象?

c - 如何在 C 中设置环境变量并启动进程?

c - 从c程序中查找后台进程的pid

c - 在 Linux 机器上获取用户的默认电子邮件

c - 生成连通图并检查它是否有欧拉循环

c - 测试 Fortran IPC : Sending 4 MiB of data using TCP/IP is equally fast as sending 100 B

c - 为什么 C 在 C99 之前没有 bool 数据类型?

c - 符合 ANSI C 标准的平台,其中全零位不是空指针表示

c - 矩阵作为 C89 中的函数参数