XHAENEUNG 런타임 오류 나는데 도통 모르겠네요..ㅠㅠ jjune0110 계속해서 RTE (SIGABRT: program aborted, probably assertion fail) 오류가 발생하네요..ㅠㅠ 도통 답을 못찾겠어서 질문 드립니다. 입력이 10자를 넘지 않는다고 해서 array[10] 으로 선언을 했는데요. 그 외에 문제의 소지가 될 만한 부분이 있을까요?? #include <stdio.h> #include <string.h> 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; } 11년 전
1개의 댓글이 있습니다. hyunhwan 10자이하의 값이 들어간다고 할 경우 char 배열의 크기는 10이 아닌 11로 잡아야 합니다. null character가 포함 되어야 하기 때문이죠. 11년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
jjune0110
계속해서
RTE (SIGABRT: program aborted, probably assertion fail)
오류가 발생하네요..ㅠㅠ
도통 답을 못찾겠어서 질문 드립니다.
입력이 10자를 넘지 않는다고 해서 array[10] 으로 선언을 했는데요. 그 외에 문제의 소지가 될 만한 부분이 있을까요??
11년 전