为什么C struct tm(time.h)返回的月份不正确?

为什么C struct tm(time.h)返回的月份不正确?,c,time,ctime,C,Time,Ctime,现在是2020年4月10日。我用C语言编写了这个整数月到字符串月的转换函数。它接受一个整数并返回一个字符串。出于某种原因,它认为现在是三月。我调查了问题是我的转换器还是其他什么,我打印了myTime->tm_mon,它在应该返回3(4月)时返回2(3月)。有人能发现(我假设是)我的错误并指出给我看吗 #include <stdio.h> #include <stdlib.h> #include <time.h> typedef struct tm tm;

现在是2020年4月10日。我用C语言编写了这个整数月到字符串月的转换函数。它接受一个整数并返回一个字符串。出于某种原因,它认为现在是三月。我调查了问题是我的转换器还是其他什么,我打印了
myTime->tm_mon
,它在应该返回
3
(4月)时返回
2
(3月)。有人能发现(我假设是)我的错误并指出给我看吗

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

typedef struct tm tm;

void *numberToLetters(int month) {
    char *smonth;
    switch (month) {
    case (0):
        smonth = "January";
        break;
    case (1):
        smonth = "February";
        break;
    case (2):
        smonth = "March";
        break;
    case (3):
        smonth = "April";
        break;
    case (4):
        smonth = "May";
        break;
    case (5):
        smonth = "June";
        break;
    case (6):
        smonth = "July";
        break;
    case (7):
        smonth = "August";
        break;
    case (8):
        smonth = "September";
        break;
    case (9):
        smonth = "October";
        break;
    case (10):
        smonth = "November";
        break;
    case (11):
        smonth = "December";
        break;
    default:
        return NULL;
    }
    return smonth;
}

int main() {
    time_t present;
    time(&present);
    tm *myTime = &present;
    void *month = (char *)numberToLetters(myTime->tm_mon);
    printf("%s\n", month);
    return 0;
}
#包括
#包括
#包括
typedef struct tm;
void*numberToLetters(整数月){
查尔斯蒙特;
开关(月){
案例(0):
smonth=“一月”;
打破
案例(1):
smonth=“二月”;
打破
案例(2):
smonth=“三月”;
打破
案例(3):
smonth=“四月”;
打破
案例(4):
smonth=“May”;
打破
案例(5):
smonth=“六月”;
打破
案例(6):
smonth=“七月”;
打破
案例(7):
smonth=“八月”;
打破
案例(8):
smonth=“九月”;
打破
案件(9):
smonth=“十月”;
打破
案例(10):
smonth=“11月”;
打破
案件(11):
smonth=“十二月”;
打破
违约:
返回NULL;
}
返回斯蒙特;
}
int main(){
时间不存在;
时间(和现在);
tm*myTime=&present;
void*month=(char*)numberToLetters(myTime->tm\u mon);
printf(“%s\n”,月);
返回0;
}
返回,要将其转换为结构,可以使用

改为

tm *myTime = localtime(&present);

而且它会打印April

等等,你不能把
time\u t
转换成
struct tm
。我想你需要使用
localtime()
gmtime()
@HellmarBecker你是对的,我错了。将更新代码
char*numberToLetters(未签名月份){char*map[]={“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”};返回月份<12?map[month]:NULL;}
显示的代码太多
void*
s。