strtof, strtod 또는 strtold 서브루틴
용도
문자열을 배정밀도 숫자로 변환합니다.
구문
설명
- 공백 문자의 초기, 비어 있을 수 있는 시퀀스(isspace()로 지정된 대로).
- 부동 소수점 상수로 해석되거나 무한대 또는 NaN 나타내는 피사체 시퀀스입니다.
- 입력 문자열의 종료 널 바이트를 포함하여 인식할 수 없는 하나 이상의 문자로 구성된 최종 문자열입니다.
그런 다음 주제 시퀀스를 부동 소수점 숫자로 변환하고 결과를 반환하려고 시도합니다.
- 선택적으로 기수 문자와 선택적 지수 부분을 포함하는 비어 있지 않은 십진수 시퀀스입니다
- 0x 또는 0X, 선택적으로 기수 문자를 포함하는 비어 있지 않은 16진수 시퀀스 및 선택적 이진 지수 부분
- 대소문자 무시, INF 또는 INFINITY 중 하나
- 나노 또는 나노(n-문자-서열 옵트 ) 중 하나이며, 나노 부분의 대소문자는 무시합니다:
n-char-sequence: digit nondigit n-char-sequence digit n-char-sequence nondigit
제목 시퀀스는 공백이 아닌 첫 번째 문자로 시작하는 입력 문자열의 가장 긴 초기 시퀀스로 정의되며, 예상되는 형식입니다. 입력 문자열이 예상 형식이 아닌 경우 제목 시퀀스에 문자가 포함되지 않습니다.
주제 시퀀스가 부동 소수점 숫자에 대해 예상되는 형태를 갖는 경우, 마침표 대신 기수 문자가 사용되는 것을 제외하고 첫 자리로 시작하는 문자 시퀀스 또는 십진수 문자(먼저 발생하는 문자)는 C 언어의 부동 상수로 해석되며, 십진수 부동 소수점에 지수 부분과 기수 문자가 모두 나타나지 않거나 16진수 부동 소수점에 이진 지수 부분이 나타나지 않으면 문자열의 마지막 자리 뒤에 0 값을 갖는 적절한 유형의 지수 부분이 오는 것으로 간주됩니다.
제목 시퀀스가 마이너스 기호로 시작하면 시퀀스가 부정적으로 해석됩니다. 문자 시퀀스 INF 또는 INFINITY는 반환 유형으로 표현 가능한 경우 무한대로, 그렇지 않으면 반환 유형의 범위에 비해 너무 큰 부동 상수인 것처럼 해석되어야 합니다. 문자 시퀀스 NAN 또는 NAN(n-문자 시퀀스 opt )은 반환 유형에서 지원되는 경우 조용한 NaN, 해석되고, 그렇지 않으면 예상되는 형식이 없는 주제 시퀀스 부분인 것처럼 해석됩니다. N-문자 시퀀스의 의미는 구현에 따라 정의됩니다. 최종 문자열에 대한 포인터는 endptr 매개변수가 널 포인터가 아닌 경우, endptr 매개변수가 가리키는 객체에 저장됩니다.
제목 시퀀스가 16진수 형식인 경우 변환 결과 값이 올바르게 반올림됩니다.
기수 문자는 프로그램의 로캘(카테고리 LC_NUMERIC)에 정의되어 있습니다. POSIX 로캘 또는 기수 문자가 정의되지 않은 로캘에서 기수 문자는 기본적으로 마침표로 설정됩니다.
C 또는 POSIX 로캘 이외의 다른 로캘에서는 구현에서 정의한 다른 주제 시퀀스가 허용될 수 있습니다.
대상 시퀀스가 비어 있거나 예상되는 형태가 아닌 경우 변환이 수행되지 않으며, 끝부분이 널 포인터가 아닌 경우 끝부분이 가리키는 객체에 str의 값이 저장됩니다.
Strtod 서브루틴이 성공하면 errno 전역 변수의 설정은 변경되지 않습니다.
오류 시 0이 반환되고 성공 시에도 유효한 반환값이므로 오류 상황을 확인하려는 애플리케이션은 errno를 0으로 설정하고 strtof 또는 strtold 하위 루틴을 호출한 다음 errno를 확인해야 합니다.
매개변수
| 항목 | 설명 |
|---|---|
| nptr | 변환될 문자열을 지정합니다. |
| endptr | 최종 문자열을 가리킵니다. |
리턴 값
성공적으로 완료되면 strtof 및 strtold 서브루틴은 변환된 값을 반환합니다. 변환을 수행할 수 없는 경우 0이 반환되고 errno 전역 변수가 EINVAL로 설정될 수 있습니다.
올바른 값이 표현 가능한 값 범위를 벗어난 경우 값의 부호에 따라 ' HUGE_VAL, ' HUGE_VALF' 또는 ' HUGE_VALL '이 반환되고 ' errno '는 ERANGE로 설정됩니다.
올바른 값으로 인해 언더플로우가 발생하면 반환 유형에서 가장 작은 정규화된 양수보다 크지 않은 값이 반환되고 errno 전역 변수가 ERANGE로 설정됩니다.
오류 코드
NumberPointer 가리키는 문자열이 비어 있거나 인식할 수 없는 문자로 시작하면 strtod, strtof 및 strtold 서브루틴에 대해 0 값이 반환됩니다.
변환을 수행할 수 없는 경우 0 값이 반환되고 오류를 나타내는 errno 전역 변수가 설정됩니다.
변환으로 인해 오버플로가 발생하면(즉, 값이 표현 가능한 값의 범위를 벗어나는 경우) 오버플로의 방향을 나타내는 부호와 함께 +/- HUGE_VAL이 반환되고 errno 전역 변수가 ERANGE로 설정됩니다.
변환으로 인해 언더플로우가 발생하면 올바르게 부호화된 값 0이 반환되고 errno 전역 변수가 ERANGE로 설정됩니다.
Strtod, strtof 및 strtold 서브루틴의 경우, EndPointer 매개변수 값이(char**) NULL이 아닌 경우 서브루틴을 중지한 문자에 대한 포인터가 *EndPointer 저장됩니다. 부동 소수점 값을 형성할 수 없는 경우 ' *EndPointer '은 ' NumberPointer.'로 설정됩니다
Strtof 서브루틴에는 반올림 오류가 하나만 있습니다. ( strtod 서브루틴을 사용하여 배정밀도 부동 소수점 숫자를 생성한 다음 해당 배정밀도 숫자를 부동 소수점 숫자로 변환하는 경우 두 가지 반올림 오류가 발생할 수 있습니다)