我想写一个方法来转换一个C字符串,代表一个日期,成不同的格式。
/*
Takes in a date of the format MM/DD/YYYY-HR:MN,
and converts it to YYYYDDMMHRMN format.
*/
void convertFormattedDate(char** date){
char* dateHelper = calloc(strlen(*date), sizeof(char));
strcpy(dateHelper, *date);
const char * delims = "/-:";
char* formattedDate = calloc(12+1, sizeof(char)); //leaving space for null terminator
char* token = strtok(dateHelper, delims);
//yes I know this is hacky and terrible
char* month = NULL;
char* day = NULL;
char* year = NULL;
char* hr = NULL;
char* mn = NULL;
int index=0;
while (token!=NULL) {
switch (index) {
case 0:
month = token;
break;
case 1:
day = token;
break;
case 2:
year = token;
break;
case 3:
hr = token;
break;
case 4:
mn = token;
break;
default:
printf("Something weird has happened");
break;
}
token = strtok(NULL, delims);
index++;
}
strcat(formattedDate, year);
strcat(formattedDate, month);
strcat(formattedDate, day);
strcat(formattedDate, hr);
strcat(formattedDate, mn);
*date = formattedDate;
}
当我试图呼叫
char* date = "10/24/1994-23:14";
convertFormattedDate(&date);
一切正常,直到我开始将年、月、日等连接成格式化的日期。
在我打电话之后strcat (formattedDate,年);
在我的代码中,mn的值突然变成了141994年
应该是
14
有谁知道为什么调用strcat会影响其他变量,或者我应该做些什么来防止这种情况?
保持简洁:
#include <stdio.h>
#include <string.h>
/*
Takes in a date of the format MM/DD/YYYY-HR:MN,
and converts it to YYYYDDMMHRMN format.
*/
void convertFormattedDate(char* date){
char* dateHelper = strdup(date);
dateHelper[0] = date[6];
dateHelper[1] = date[7];
dateHelper[2] = date[8];
dateHelper[3] = date[9];
dateHelper[4] = date[3];
dateHelper[5] = date[4];
dateHelper[6] = date[0];
dateHelper[7] = date[1];
dateHelper[8] = date[11];
dateHelper[9] = date[12];
dateHelper[10] = date[14];
dateHelper[11] = date[15];
dateHelper[12] = ' ';
strcpy(date, dateHelper);
free(dateHelper);
}
int main(void)
{
char dt[] = "10/21/2015-00:19";
convertFormattedDate(dt);
printf("%sn", dt);
return 0;
}
程序输出201521100019