> 백엔드 개발 > C++ > strtol을 올바르게 사용하여 문자열을 긴 정수로 변환하고 잠재적인 오류를 처리하려면 어떻게 해야 합니까?

strtol을 올바르게 사용하여 문자열을 긴 정수로 변환하고 잠재적인 오류를 처리하려면 어떻게 해야 합니까?

Mary-Kate Olsen
풀어 주다: 2024-12-25 17:31:14
원래의
778명이 탐색했습니다.

How Can I Correctly Use strtol to Convert Strings to Long Integers and Handle Potential Errors?

strtol의 올바른 사용법

strtol 함수는 긴 정수의 문자열 표현을 긴 값으로 변환합니다. 하지만 이 함수를 사용할 때에는 오류를 올바르게 처리하는 방법을 이해하는 것이 필수적입니다.

주어진 코드에서는 잘못된 가정으로 인해 문제가 발생합니다. 코드는 strtol이 문자열을 성공적으로 변환하는 경우 두 번째 매개 변수가 NULL과 같아야 한다는 사실에 의존합니다. 그러나 이 가정이 항상 사실이 아닐 수도 있습니다.

strtol에서 오류를 효과적으로 감지하려면 적절한 오류 처리 지침을 따라야 합니다.

  • errno를 0으로 설정하세요. strtol을 호출하기 전: 표준 라이브러리 함수는 errno를 0으로 설정하지 않으므로 각 strtol 전에 수동으로 0으로 설정해야 합니다. call.
  • str과 *temp != ' ': 오류 조건은 제목 시퀀스가 ​​비어 있거나 예상한 형식이 아닐 때 발생합니다. 이는 temp == str 또는 주제 시퀀스 뒤의 인식할 수 없는 문자로 표시됩니다. 이는 *temp != ' '로 확인됩니다.
  • 표현 가능한 범위를 벗어난 값을 처리합니다: 변환된 값인 경우 표현 가능한 long 범위를 벗어나는 경우 strtol은 LONG_MIN, LONG_MAX를 반환하거나 errno를 ERANGE로 설정합니다. 이러한 오류를 올바르게 처리하려면 이를 확인해야 합니다.

다음은 이러한 원칙을 준수하는 parsLong 함수의 수정된 버전입니다.

static long parseLong(const char *str)
{
    errno = 0;
    char *temp;
    long val = strtol(str, &temp, 0);

    if (temp == str || *temp != '<pre class="brush:php;toolbar:false">bool parseLong(const char *str, long *val)
{
    errno = 0;
    char *temp;
    *val = strtol(str, &temp, 0);

    if (temp == str || *temp != '' ||
        ((*val == LONG_MIN || *val == LONG_MAX) &amp;&amp; errno == ERANGE)) {
        return false;
    }

    return true;
}
로그인 후 복사
' || ((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; // or LONG_MIN/LONG_MAX if needed } return val; }

또는 별도의 오류 처리를 위해 변환 결과에서 수정된 인터페이스를 사용할 수 있습니다:

위 내용은 strtol을 올바르게 사용하여 문자열을 긴 정수로 변환하고 잠재적인 오류를 처리하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿