我有这个简单的功能:
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))
答案 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;
}