문자열 변환과 포매팅¶
숫자 변환과 포맷된 문자열 출력을 위한 함수.
-
int
PyOS_snprintf
(char *str, size_t size, const char *format, ...)¶ 포맷 문자열 format 과 추가 인자에 따라 size 바이트를 넘지 않도록 str로 출력합니다. 유닉스 매뉴얼 페이지 snprintf(2)를 보십시오.
-
int
PyOS_vsnprintf
(char *str, size_t size, const char *format, va_list va)¶ 포맷 문자열 format 과 가변 인자 목록 va에 따라 size 바이트를 넘지 않도록 str로 출력합니다. 유닉스 매뉴얼 페이지 vsnprintf(2)를 보십시오.
PyOS_snprintf()
와 PyOS_vsnprintf()
는 표준 C 라이브러리 함수 snprintf()
와 vsnprintf()
를 감쌉니다. 그들의 목적은 경계 조건에서 표준 C 함수가 제공하지 않는 수준의 일관된 동작을 보장하는 것입니다.
래퍼는 반환 시 str*[*size-1]이 항상 '\0'
이 되도록 합니다. str에 size 바이트(후행 '\0'
포함)를 초과해서 쓰지 않습니다. 두 함수 모두 str != NULL
, size > 0
및 format != NULL
을 요구합니다.
If the platform doesn’t have vsnprintf()
and the buffer size needed to
avoid truncation exceeds size by more than 512 bytes, Python aborts with a
Py_FatalError()
.
이 함수들의 반환 값(rv)은 다음과 같이 해석되어야 합니다:
0 <= rv < size
일 때, 출력 변환에 성공했으며 rv 문자가 str에 기록되었습니다 (str*[*rv]의 후행'\0'
바이트 제외).rv >= size
일 때, 출력 변환이 잘렸고 성공하려면rv + 1
바이트의 버퍼가 필요합니다. str*[*size-1]은 이때'\0'
입니다.rv < 0
일 때, “뭔가 나쁜 일이 일어났습니다.” 이때도 str*[*size-1]은'\0'
이지만, str의 나머지는 정의되지 않습니다. 에러의 정확한 원인은 하부 플랫폼에 따라 다릅니다.
다음 함수는 로케일 독립적인 문자열에서 숫자로의 변환을 제공합니다.
-
double
PyOS_string_to_double
(const char *s, char **endptr, PyObject *overflow_exception)¶ 문자열
s
를double
로 변환하고, 실패 시 파이썬 예외를 발생시킵니다. 허용되는 문자열 집합은s
가 선행이나 후행 공백을 가질 수 없다는 점을 제외하고는 파이썬의float()
생성자가 허용하는 문자열 집합에 대응합니다. 변환은 현재 로케일과 독립적입니다.endptr
이NULL
이면, 전체 문자열을 변환합니다. 문자열이 부동 소수점 숫자의 유효한 표현이 아니면ValueError
를 발생시키고-1.0
을 반환합니다.endptr이
NULL
이 아니면, 가능한 한 많은 문자열을 변환하고*endptr
이 변환되지 않은 첫 번째 문자를 가리키도록 설정합니다. 문자열의 초기 세그먼트가 부동 소수점 숫자의 유효한 표현이 아니면,*endptr
이 문자열의 시작을 가리키도록 설정하고, ValueError를 발생시키고-1.0
을 반환합니다.s
가 float에 저장하기에 너무 큰 값을 나타낼 때 (예를 들어, 여러 플랫폼에서"1e500"
가 그런 문자열입니다),overflow_exception
가NULL
이면 (적절한 부호와 함께)Py_HUGE_VAL
을 반환하고, 어떤 예외도 설정하지 않습니다. 그렇지 않으면,overflow_exception
은 파이썬 예외 객체를 가리켜야 합니다; 그 예외를 발생시키고-1.0
를 반환합니다. 두 경우 모두, 변환된 값 다음의 첫 번째 문자를 가리키도록*endptr
을 설정합니다.변환 중 다른 에러가 발생하면 (예를 들어 메모리 부족 에러), 적절한 파이썬 예외를 설정하고
-1.0
을 반환합니다.버전 3.1에 추가.
-
char*
PyOS_double_to_string
(double val, char format_code, int precision, int flags, int *ptype)¶ 제공된 format_code, precision 및 flags를 사용하여
double
val을 문자열로 변환합니다.format_code는
'e'
,'E'
,'f'
,'F'
,'g'
,'G'
또는'r'
중 하나여야 합니다.'r'
의 경우, 제공된 precision은 0이어야 하며 무시됩니다.'r'
포맷 코드는 표준repr()
형식을 지정합니다.flags can be zero or more of the values
Py_DTSF_SIGN
,Py_DTSF_ADD_DOT_0
, orPy_DTSF_ALT
, or-ed together:Py_DTSF_SIGN
means to always precede the returned string with a sign character, even if val is non-negative.Py_DTSF_ADD_DOT_0
means to ensure that the returned string will not look like an integer.Py_DTSF_ALT
means to apply “alternate” formatting rules. See the documentation for thePyOS_snprintf()
'#'
specifier for details.
If ptype is non-
NULL
, then the value it points to will be set to one ofPy_DTST_FINITE
,Py_DTST_INFINITE
, orPy_DTST_NAN
, signifying that val is a finite number, an infinite number, or not a number, respectively.The return value is a pointer to buffer with the converted string or
NULL
if the conversion failed. The caller is responsible for freeing the returned string by callingPyMem_Free()
.버전 3.1에 추가.
-
int
PyOS_stricmp
(const char *s1, const char *s2)¶ 대소 문자 구분 없는 문자열 비교. 이 함수는 대소 문자를 무시한다는 점만 제외하면
strcmp()
와 거의 같게 작동합니다.
-
int
PyOS_strnicmp
(const char *s1, const char *s2, Py_ssize_t size)¶ 대소 문자 구분 없는 문자열 비교. 이 함수는 대소 문자를 무시한다는 점만 제외하면
strncmp()
와 거의 같게 작동합니다.