我正在创建一个函数,它以某种格式输出当前系统时间。

char *get_time() {
    char *current_time;
    time_t rawtime;
    struct tm *timeinfo;

    time(&rawtime);
    timeinfo = localtime(&rawtime);

    sprintf(current_time, "[%d/%d %d:%d] # ", timeinfo->tm_mday, timeinfo->tm_mon + 1, timeinfo->tm_hour, timeinfo->tm_min);

    return current_time;
}

char *current_time在用于sprintf()之前需要初始化。我该怎么做?

最佳答案

自从C99以来,复合文本为内存分配提供了一个很好的解决方案。get_time()的返回值在块结束前有效

#include <stdio.h>
#include <time.h>
#define GET_TIME_N 17
#define GET_TIME()  get_time((char[GET_TIME_N]) { ""}, GET_TIME_N)

char *get_time(char *current_time, size_t n) {
  time_t rawtime;
  struct tm *timeinfo;
  time(&rawtime);
  timeinfo = localtime(&rawtime);
  snprintf(current_time, n, "[%d/%d %d:%d] # ", timeinfo->tm_mday,
          timeinfo->tm_mon + 1, timeinfo->tm_hour, timeinfo->tm_min);
  return current_time;
}

int main(void) {
  printf("%s\n%s\n%s\n", GET_TIME(), GET_TIME(), GET_TIME());
}

输出
[27/3 12:33] #
[27/3 12:33] #
[27/3 12:33] #

关于c - 如何初始化一个char指针,然后使用sprintf创建一个字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36250162/

10-11 21:29