XHAENEUNG 런타임 오류입니다; "RTE (SIGABRT: program aborted, probably assertion fail)" 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 crt_word의 크기가 5가 아니라 6이상이 되어야 할 것 같습니다. 8년 전 link ghlee0228 아 정말 감사합니다! 크기 6으로 주니까 실행되네요. 크기가 5넘어가는 문자열이 없는데, 6이상이 되어야하는 이유는 뭘까요? 8년 전 link hyunhwan 길이가 N인 문자열을 저장하기 위해서는 N+1 크기의 문자열이 필요로 하기 때문에 그렇습니다. 8년 전 link ghlee0228 감사합니다. 많이 배워갑니다:D 8년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
ghlee0228
C로 작성했습니다.
어디서 에러가 발생하는지 모르겠네요. 미리 답변 감사합니다!
에러 메세지
RTE (SIGABRT: program aborted, probably assertion fail)
소스 코드
8년 전