尽管i = n的值是有限的,但内部while循环无限执行。
它编译但显示分段错误。

我的密码

char s[]="22/02/1997",r[20],temp[20];
int i,j,k,z,n;
for(n=strlen(s)-1; n>=0; n=i)
{
    i=n;
    k=0;
    while(s[i]!='/' || s[i]!='-')
    {
        temp[k++]=s[i];
        i--;
    }
    i--;
    for(z=strlen(temp)-1,j=0; z>=0; z--,j++)
    {
        r[j]=temp[z];
    }
    temp[0]='\0';  //empty the array
}
printf("%s",r);

最佳答案

您的代码中存在多个问题。


j = 0将在所有循环之外。这意味着必须将其放置在外部for循环的起始位置。
您没有正确处理分配空值。在任何地方,您都没有在数组末尾分配空值。
您的预期答案是yyyy/mm/dd。但是您没有将/-分配给输出。
在while循环中,您还添加了一个条件,即检查i的值是否大于或等于0。如果不存在此条件,则它将尝试访问数组中的-1th位置,而不是已分配。因此,只有您得到分段错误错误。


最后,我纠正了所有这些错误。尝试以下代码,它将按预期工作。

#include<stdio.h>
#include<string.h>
int main()
{
    char s[]="12/02/1997",r[50],temp[50];
    int i,j,k,z,n;
    j = 0;
    for(n=strlen(s)-1; n>=0; n=i)
    {
        i=n;
        k=0;
        while(s[i]!='/' && s[i]!='-' && i >= 0)
        {
            temp[k++]=s[i];
            i--;
        }
        i--;
        temp[k] = '\0';
        for(z=strlen(temp)-1; z>=0; z--,j++)
        {
            r[j]=temp[z];
        }
        if(i >= 1) // If the i is greater than 1, then only it have a slash or hypen
        {
            r[j++] = s[i + 1]; //Assigning the / or - to the output.
        }
        temp[0]='\0';  //empty the array
    }
    r[j] = '\0';
    printf("%s\n",r);
}

关于c - 使用C将日期格式格式从dd/mm/yyyy转换为yyyy/mm/dd,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41907154/

10-16 01:03