주어진 C 프로그램에서 strtol의 사용법은 다음을 활용하는 것처럼 보입니다. 성공적인 문자열에서 긴 변환은 오류를 확인하기 위해 두 번째 매개변수(endptr)를 NULL과 동일하게 유지해야 한다는 사실입니다. 그러나 표시되는 오류 메시지는 항상 그런 것은 아님을 나타냅니다.
strtol에서 오류 감지에 대한 올바른 접근 방식은 여러 단계로 구성됩니다.
1. errno를 0으로 설정: 표준 C 라이브러리 함수는 errno를 0으로 설정하지 않으므로 strtol을 호출하기 전에 수동으로 설정하면 발생한 모든 오류가 errno에 반영됩니다.
2. 변환 결과 확인: strtol이 0 또는 LONG_MIN/LONG_MAX를 반환하고 errno가 ERANGE로 설정된 경우 변환 오류 또는 범위를 벗어난 값을 나타냅니다.
3. 오류 유형 구별: 경우에 따라 후행 정크 또는 잘못된 숫자 형식과 같은 특정 오류 유형을 구별해야 할 수도 있습니다. 이는 endptr의 위치와 errno의 오류 값을 확인하여 달성할 수 있습니다.
다음은 parsLong 함수의 수정된 버전입니다.
static long parseLong(const char *str) { char *temp; errno = 0; // Reset errno long val = strtol(str, &temp, 0); if (temp == str || *temp != '' || ((val == LONG_MIN || val == LONG_MAX) && errno == ERANGE)) { fprintf(stderr, "Could not convert '%s' to long and leftover string is: '%s'\n", str, temp); return 0; // Handle errors by returning a specific value like 0 } return val; }
이 함수는 오류가 발생하면 0을 반환하고, 오류가 발생하면 변환된 값을 반환합니다. 성공했습니다.
이 오류 분석의 핵심은 errno 설정, 변환 결과 확인 및 오류 유형 구별을 포함하는 포괄적인 오류 처리 접근 방식을 사용한다는 것입니다. 이는 문자열을 숫자로 변환할 때 강력하고 안정적인 코드를 보장합니다.
위 내용은 C의 `strtol` 함수를 사용할 때 오류를 올바르게 처리하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!