在函数中间随机改变字符串的值



我想写一个方法来转换一个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

最新更新