endian 문제 질문입니다. 햇반2 특정 값에 대해서 strtol의 리턴값이 2147483647로 출력되고 있습니다. 자료형을 long long으로 변경 하고 테스트해도 문제가 발생되고 있는데 조언 부탁 드립니다. #include <stdio.h> #include <memory.h> #include <stdlib.h> #include <string.h> #define MAX 11 int main() { int testCase = 0; char inputStr[MAX]; char outStr[MAX]; char* p; int input; int cnt = 2; long long res = 0; int outResCnt = 0; int validSize = 0; int inputSize = 0; char* temp; scanf("%d", &testCase); for (int i = 0; i < testCase; i++) { scanf("%d", &input); sprintf(inputStr, "0x%x", input); inputSize = strlen(inputStr); validSize = (MAX-1) - inputSize; if (validSize != 0) { temp = (char*)malloc(sizeof(char)*inputSize - 1); strcpy(temp, &inputStr[2]); strcpy(&inputStr[validSize + 2], temp); free(temp); } memset(inputStr, '0', validSize + 2); p = &inputStr[8]; while (cnt < 10) { outStr[cnt++] = *p; outStr[cnt++] = *(p + 1); p = p - 2; } outStr[0] = '0'; outStr[1] = 'x'; outStr[10] = '\0'; res = (long long)strtol(outStr, NULL, 16); printf("%lld\n", res); memset(inputStr, 0, 11); memset(outStr, 0, 11); cnt = 2; p = NULL; } } 9년 전
1개의 댓글이 있습니다. Toivoa strtol 리턴값이 long인데, long 범위를 넘어가면 LONG_MAX(=2147483647 = 2^31-1) 이 리턴됩니다. 9년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
햇반2
특정 값에 대해서 strtol의 리턴값이
2147483647로 출력되고 있습니다.
자료형을 long long으로 변경 하고 테스트해도
문제가 발생되고 있는데 조언 부탁 드립니다.
9년 전