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