Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C字符串在函数中间随机改变值_C_Gcc - Fatal编程技术网

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

C字符串在函数中间随机改变值,c,gcc,C,Gcc,我正在尝试编写一个方法,将表示日期的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);

我正在尝试编写一个方法,将表示日期的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(格式日期,年份)

通过我的代码,mn的值突然变为

141994

当它只应该是

十四,

有人知道为什么调用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] = '\0';
    strcpy(date, dateHelper);
    free(dateHelper);
}

int main(void)
{
    char dt[] = "10/21/2015-00:19";
    convertFormattedDate(dt);
    printf("%s\n", dt);
    return 0;
}

sizeof(date)
将是4或8,相当于您机器上的指针大小。哇,是的。我可能想要斯特伦(*日期)。谢谢你为什么要更改你发布的代码,是打字错误吗?这是你的密码吗?
201521100019