当前位置: 首页 > 知识库问答 >
问题:

如何修复这个错误,为什么我会得到它?[重复]

凌鹏程
2023-03-14

我需要将12小时的时间转换为24小时的格式

我现在已经把12小时的时间硬编码了,以使事情更简单。

我的逻辑:输入sting 07:05:45PM提取最后2个字符。如果AM check为前两个字符,则为12。。如果是,则将其设置为00,否则按原样输出,如果PM检查前两位数字是否为12。。如果是,请保持原样,如果不是,则在前2位加上12

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

    char* timeConversion(char* s1)
    {
        // input sting 07:05:45PM
        // extract last 2 chars.
        // if AM 
        // check is first 2 chars are 12.. if yes chance them to 00
        // else output as it is
        // if PM 
        // check if first 2 digits are 12 ..if yes leave as it is
        // if not then add 12 to first 2 digits

        char s[strlen(s1) + 1];
        strcpy(s, s1);


        char suffix[3]; // pm am 
        suffix[0] = s[strlen(s) - 2];
        suffix[1] = s[strlen(s) - 1];
        suffix[2] = '\0';

        char xx[3]; // first 2 nos
        xx[0] = s[0];
        xx[1] = s[1];
        xx[2] = '\0';

        s[strlen(s1) - 1] = '\0';
        s[strlen(s1) - 2] = '\0';

         if(strcmp(suffix, "AM") == 0)
        {
            if(strcmp(xx, "12") == 0)
            {
                s[0] = '0';
                s[1] = '0';
                strcpy(s1, s);

             }
             else
            {
                return s1;
            }
        }
        else
        {


            if(strcmp(xx, "12") == 0)
            {
                strcpy(s, s1);
                return s1;
             }
            else
            {
                int n;
                // 01 - 09 
                if(xx[0] == '0')
                {
                    char x = xx[1];
                    n = x - '0';

                    // xx = itoa(n);
                }
                else
                {
                    // 10, 11
                    n = atoi(xx);

                }
                n = n + 12;



                 // itoa(n, xx, 10);
                sprintf(xx, "%d", n); 
                s[0] = xx[0];
                s[1] = xx[1];
            }
        }
        strcpy(s1, s);
        return s1;   
    }  

    int main()
    {
       char *str = "07:05:45PM";
       char *str1 = timeConversion(str);
       printf("%s\n", str1);
       return 0;

    }

总线错误:10是我运行代码得到的

共有1个答案

方和顺
2023-03-14

问题在于

 strcpy(s1, s);

实际上,您是在试图写入指向字符串文本的第一个元素的指针。它调用未定义的行为。

检查函数调用

timeConversion(str);

其中,str指向字符串文本,任何修改字符串文本内容的尝试都是无效的。

timeConversion()函数中需要做的是:

  • 已分配所需的内存量(调用malloc()是一种方式)
  • 用它来保存修改后的输出
  • 将指针返回给调用者。
  • 使用完毕后释放内存。
 类似资料: