XHAENEUNG 런타임 오류 나는데 도통 모르겠네요..ㅠㅠ

  • User Avatar
    jjune0110

    계속해서
    RTE (SIGABRT: program aborted, probably assertion fail)
    오류가 발생하네요..ㅠㅠ

    도통 답을 못찾겠어서 질문 드립니다.

    입력이 10자를 넘지 않는다고 해서 array[10] 으로 선언을 했는데요. 그 외에 문제의 소지가 될 만한 부분이 있을까요??


    ~~~ c++
    #include
    #include

    int cvtNum(char* str)
    {
    if(!strcmp(str, "one"))
    return 1;
    else if(!strcmp(str, "two"))
    return 2;
    else if(!strcmp(str, "three"))
    return 3;
    else if(!strcmp(str, "four"))
    return 4;
    else if(!strcmp(str, "five"))
    return 5;
    else if(!strcmp(str, "six"))
    return 6;
    else if(!strcmp(str, "seven"))
    return 7;
    else if(!strcmp(str, "eight"))
    return 8;
    else if(!strcmp(str, "nine"))
    return 9;
    else if(!strcmp(str, "zero"))
    return 0;
    else
    return -1;
    }

    int calc(int numA, int numB, char *op)
    {
    int rval;

    if(op[0] == '+')
        rval = numA + numB;
    else if(op[0] == '-')
        rval = numA - numB;
    else if(op[0] == '*')
        rval = numA * numB;
    else
        rval = -1;
    
    return rval;
    

    }

    int checkAnswer(int num, char *str)
    {
    int len, i, j, rval;
    char ans[10];

    memset(ans, 0x00, sizeof(char)*10);
    
    switch(num){
        case 0:
            strcpy(ans, "zero");
            break;
        case 1:
            strcpy(ans, "one");
            break;
        case 2:
            strcpy(ans, "two");
            break;
        case 3:
            strcpy(ans, "three");
            break;
        case 4:
            strcpy(ans, "four");
            break;
        case 5:
            strcpy(ans, "five");
            break;
        case 6:
            strcpy(ans, "six");
            break;
        case 7:
            strcpy(ans, "seven");
            break;
        case 8:
            strcpy(ans, "eight");
            break;
        case 9:
            strcpy(ans, "nine");
            break;
    }
    
    // compare(ans, str);
    
    len = strlen(ans);
    if(len != strlen(str)){
        return -1;
    }
    
    for(i=0; i<len; ++i){
        for(j=0; j<len; ++j){
            if(ans[i] == str[j]){
                str[j] = '\0';
                j=len;
            }
        }
        if(j==len)
            return -1;
    }
    
    
    return 0;
    

    }

    int process(void)
    {
    char eq[80];
    char strA[10];
    char strB[10];
    char strC[10];
    char op[10];
    int numA;
    int numB;
    int numC;

    memset(eq, 0x00, sizeof(char)*80);
    
    fgets(eq, 80, stdin);
    
    strcpy(strA, strtok(eq, " "));
    strcpy(op, strtok(NULL, " "));
    strcpy(strB, strtok(NULL, " "));
    strcpy(strC, strtok(NULL, " = "));
    strC[strlen(strC)-1] = NULL;
    
    numA = cvtNum(strA);
    if(numA < 0){
        return -1;
    }
    numB = cvtNum(strB);
    if(numB < 0){
        return -1;
    }
    numC = calc(numA, numB, op);
    if(numC < 0){
        return -1;
    }
    
    return checkAnswer(numC, strC);
    

    }

    int main(void)
    {
    int i, num;
    int rval;

    scanf("%d\n", &num);
    
    for(i=0; i<num; ++i){
        rval = process();
        if(rval==0)
            printf("Yes\n");
        else
            printf("No\n");
    }
    
    return 0;
    

    }
    ~~~


    12년 전
1개의 댓글이 있습니다.
  • User Avatar
    hyunhwan

    10자이하의 값이 들어간다고 할 경우 char 배열의 크기는 10이 아닌 11로 잡아야 합니다. null character가 포함 되어야 하기 때문이죠.


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