XHAENEUNG 런타임 오류입니다; "RTE (SIGABRT: program aborted, probably assertion fail)"

  • ghlee0228
    ghlee0228

    C로 작성했습니다.
    어디서 에러가 발생하는지 모르겠네요. 미리 답변 감사합니다!

    에러 메세지

    RTE (SIGABRT: program aborted, probably assertion fail)

    소스 코드

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <search.h>
    #define LEN 11
    
    int compare(const void *cmp1, const void *cmp2)
    {
        return strcmp((char *)cmp1, (char *)cmp2);
    }
    
    int word_to_num(char *operand)
    {
        int num;
    
        switch (operand[0])
        {
        case 'z': // zero
            num = 0;
            break;
        case 'o': // one
            num = 1;
            break;
        case 't': // two, three, ten
            if (operand[1] == 'w') num = 2;
            else if (operand[1] == 'h') num = 3;
            else num = 10;
            break;
        case 'f': // four, five
            if (operand[1] == 'o') num = 4;
            else num = 5;
            break;
        case 's': // six, seven
            if (operand[1] == 'i') num = 6;
            else num = 7;
            break;
        case 'e': // eight
            num = 8;
            break;
        case 'n': // nine
            num = 9;
            break;  
        }
    
        return num;
    }
    
    int calc(int num1, int num2, char *oprator)
    {
        switch (oprator[0])
        {
            case '+': return (num1 + num2);
            case '-': return (num1 - num2);
            case '*': return (num1 * num2);
        }   
    }
    
    int checkup(int res, char *answer)
    {   
        char crt_word[5] = "";
        char usr_word[LEN] = "";
    
        if (res < 0 || res > 10) return 0;
        strcpy(usr_word, answer);
        qsort(usr_word, strlen(usr_word), sizeof(char), compare);
    
        switch (res)
        {
        case 0: 
            strcpy(crt_word, "eorz");
            if ((strncmp(crt_word, usr_word, 4)) == 0) return 1;
            break;
        case 1: 
            strcpy(crt_word, "eno");
            if ((strncmp(crt_word, usr_word, 3)) == 0) return 1;
            break;
        case 2: 
            strcpy(crt_word, "otw");
            if ((strncmp(crt_word, usr_word, 3)) == 0) return 1;        
            break;
        case 3: 
            strcpy(crt_word, "eehrt");
            if ((strncmp(crt_word, usr_word, 5)) == 0) return 1;
            break;
        case 4: 
            strcpy(crt_word, "foru");
            if ((strncmp(crt_word, usr_word, 4)) == 0) return 1;
            break;
        case 5: 
            strcpy(crt_word, "efiv");
            if ((strncmp(crt_word, usr_word, 4)) == 0) return 1;
            break;
        case 6: 
            strcpy(crt_word, "isx");
            if ((strncmp(crt_word, usr_word, 3)) == 0) return 1;
            break;
        case 7: 
            strcpy(crt_word, "eensv");
            if ((strncmp(crt_word, usr_word, 5)) == 0) return 1;
            break;
        case 8: 
            strcpy(crt_word, "eghit");
            if ((strncmp(crt_word, usr_word, 5)) == 0) return 1;
            break;
        case 9: 
            strcpy(crt_word, "einn");
            if ((strncmp(crt_word, usr_word, 4)) == 0) return 1;
            break;
        case 10: 
            strcpy(crt_word, "ent");
            if ((strncmp(crt_word, usr_word, 3)) == 0) return 1;
            break;
        }
    
        return 0;
    }
    
    int main()
    {
        char oprand1[LEN] = "";
        char oprand2[LEN] = "";
        char answer[LEN] = "";
        char oprator[2] = "";
        int res;
        int testcase;
    
        scanf("%d", &testcase);
        while (testcase--)
        {
            scanf("%s %s %s = %s", oprand1, oprator, oprand2, answer);
            res = calc(word_to_num(oprand1), word_to_num(oprand2), oprator);
    
            if (checkup(res, answer)) printf("Yes\n");
            else printf("No\n");
        }
    
        return 0;
    }
    

    8년 전
4개의 댓글이 있습니다.
  • hyunhwan
    hyunhwan

    crt_word의 크기가 5가 아니라 6이상이 되어야 할 것 같습니다.


    8년 전 link
  • ghlee0228
    ghlee0228

    아 정말 감사합니다!
    크기 6으로 주니까 실행되네요.

    크기가 5넘어가는 문자열이 없는데, 6이상이 되어야하는 이유는 뭘까요?


    8년 전 link
  • hyunhwan
    hyunhwan

    길이가 N인 문자열을 저장하기 위해서는 N+1 크기의 문자열이 필요로 하기 때문에 그렇습니다.


    8년 전 link
  • ghlee0228
    ghlee0228

    감사합니다.
    많이 배워갑니다:D


    8년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.