strtol(3) - wariua/manpages-ko GitHub Wiki
strtol, strtoll, strtoq - λ¬Έμμ΄μ long μ μλ‘ λ³ννκΈ°
#include <stdlib.h>
long int strtol(const char *nptr, char **endptr, int base);
long long int strtoll(const char *nptr, char **endptr, int base);
glibc κΈ°λ₯ νμΈ λ§€ν¬λ‘ μ건 (feature_test_macros(7) μ°Έκ³ ):
-
strtoll()
: -
_ISOC99_SOURCE
|| /* glibc λ²μ <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
strtol()
ν¨μλ nptr
μ μλ λ¬Έμμ΄μ μ²μ λΆλΆμ μ§μ ν base
μ λ°λΌ long int
κ°μΌλ‘ λ³ννλ€. κΈ°μλ 2μ 36 μ¬μ΄μ΄κ±°λ νΉμν κ° 0μ΄μ΄μΌ νλ€.
λ¬Έμμ΄μ΄ μμ κ°μμ 곡백(isspace(3)
μΌλ‘ νλ¨)μΌλ‘ μμν μ μμΌλ©° κ·Έ λ€μμ μ νμ μΌλ‘ '+' λ΄μ§ '-' λΆνΈ ν κ°κ° μ¬ μ μλ€. base
κ° 0μ΄λ 16μ΄λ©΄ λ¬Έμμ΄μμ λ€μμ "0x" λ΄μ§ "0X" μ λλΆκ° μμ μ μμΌλ©°, κ·Έλ¬λ©΄ μλ₯Ό 16μ§μλ‘ μ½μ΄ λ€μΈλ€. κ·Έλ μ§ μκ³ λ€μ λ¬Έμκ° '0'μ΄λ©΄ base
0μ 8λ‘ (8μ§μλ‘) λ°μλ€μ΄λ©°, μλλ©΄ 10μΌλ‘ (10μ§μλ‘) λ°μλ€μΈλ€.
λ¬Έμμ΄ λλ¨Έμ§λ₯Ό λͺ
λ°±ν λ°©μμΌλ‘ long int
κ°μΌλ‘ λ³ννλ©° ν΄λΉ κΈ°μμμ μ ν¨ μ«μκ° μλ 첫 λ²μ§Έ λ¬Έμμμ λ©μΆλ€. (κΈ°μκ° 10λ³΄λ€ ν° κ²½μ° λμλ¬Έμ κΈμ 'A'κ° 10μ, 'B'κ° 11μ λνλ΄λ©°, κ·Έλ° μμΌλ‘ 'Z'κ° 35λ₯Ό λνλΈλ€.)
endptr
μ΄ NULLμ΄ μλλ©΄ strtol()
μ 첫 λ²μ§Έ λΉμ ν¨ λ¬Έμμ μ£Όμλ₯Ό *endptr
μ μ μ₯νλ€. μ«μκ° μ ν μμμΌλ©΄ strtol()
μ nptr
μ μλ κ°μ *endptr
μ μ μ₯νλ€. (κ·Έλ¦¬κ³ 0μ λ°ννλ€.) νΉν *nptr
μ΄ '\0'μ΄ μλλ° λ°ν μ **endptr
μ΄ '\0'μ΄λ©΄ λ¬Έμμ΄ μ μ²΄κ° μ ν¨ν κ²μ΄λ€.
strtoll()
ν¨μλ strtol()
ν¨μμ²λΌ λμνλ long long int
κ°μ λ°ννλ€.
κ°μ΄ μΈλνλ‘μ°λ μ€λ²νλ‘μ° λμ§ μμΌλ©΄ strtol()
ν¨μλ λ³ν κ²°κ³Όλ₯Ό λ°ννλ€. μΈλνλ‘μ°κ° μΌμ΄λλ©΄ strtol()
μ LONG_MIN
μ λ°ννλ€. μ€λ²νλ‘μ°κ° μΌμ΄λλ©΄ strtol()
μ LONG_MAX
λ₯Ό λ°ννλ€. λ κ²½μ° λͺ¨λμμ errno
λ₯Ό ERANGE
λ‘ μ€μ νλ€. κ°μ λ΄μ©μ΄ strtoll()
μ (LONG_MIN
κ³Ό LONG_MAX
λμ LLONG_MIN
κ³Ό LLONG_MAX
λ‘) μ μ©λλ€.
EINVAL
- (C99μλ μμ) μ§μ ν
base
κ° μ§μνμ§ μλ κ°μ λ΄κ³ μλ€. ERANGE
- κ²°κ³Ό κ°μ΄ λ²μλ₯Ό λ²μ΄λ¬λ€.
ꡬνμμ λ³νμ μ ν μννμ§ μμ κ²½μ°μ (μ«μ μμ, 0 λ°ν) errno
λ₯Ό EINVAL
λ‘ μ€μ ν μλ μλ€.
μ΄ μ μμ μ¬μ©νλ μ©μ΄λ€μ λν μ€λͺ μ attributes(7)λ₯Ό 보λΌ.
μΈν°νμ΄μ€ | μμ± | κ° |
---|---|---|
strtol() , strtoll() , strtoq()
|
μ€λ λ μμ μ± | MT-Safe locale |
strtol()
: POSIX.1-2001, POSIX.1-2008, C89, C99, SVr4, 4.3BSD.
strtoll()
: POSIX.1-2001, POSIX.1-2008, C99.
strtol()
μ΄ μ±κ³΅κ³Ό μ€ν¨ μ΄λ μͺ½μμλ μ λ²νκ² 0μ΄λ LONG_MAX
, LONG_MIN
μ (strtoll()
μμ LLONG_MAX
, LLONG_MIN
) λ°νν μ μμΌλ―λ‘ νΈμΆ νλ‘κ·Έλ¨μμλ νΈμΆ μ μ errno
λ₯Ό 0μΌλ‘ μ€μ νκ³ μ νΈμΆ νμ errno
κ° 0 μλ κ°μΈμ§ κ²μ¬ν΄μ μ€λ₯κ° λ°μνλμ§ νμΈν΄μΌ νλ€.
POSIX.1μ λ°λ₯΄λ©΄ "C" λ° "POSIX" μΈμ λ‘μΊμμ μ΄ ν¨μλ€μ΄ ꡬνμμ μ μνλ λ€λ₯Έ μ«μ λ¬Έμμ΄λ€μ λ°μλ€μΌ μλ μλ€.
BSDμλ μμ ν μ μ¬νκ² μ μλ λ€μ ν¨μκ° μλ€.
quad_t strtoq(const char *nptr, char **endptr, int base);
νμ¬ μν€ν
μ²μ μλ ν¬κΈ°μ λ°λΌ strtoll()
μ΄λ strtol()
κ³Ό λλ±ν μ μλ€.
μλ νλ‘κ·Έλ¨μ strtol()
μ¬μ© λ°©μμ λ³΄μ¬ μ€λ€. 첫 λ²μ§Έ λͺ
λ Ήν μΈμλ strtol()
μ΄ μλ₯Ό νμ± ν λ¬Έμμ΄μ μ§μ νλ€. λ λ²μ§Έ (μ νμ ) μΈμλ λ³νμ μ¬μ©ν κΈ°μλ₯Ό μ§μ νλ€. (μ΄ μΈμλ₯Ό μλ‘ λ³ννλ κ²μ atoi(3) ν¨μμΈλ°, μ€λ₯ κ²μ¬λ₯Ό νμ§ μμΌλ©° strtol()
λ³΄λ€ μΈν°νμ΄μ€κ° λ¨μνλ€.) λ€μμ μ΄ νλ‘κ·Έλ¨μ΄ λ΄λλ λͺ κ°μ§ μμ κ²°κ³Όλ€μ΄λ€.
$ ./a.out 123
strtol() returned 123
$ ./a.out ' 123'
strtol() returned 123
$ ./a.out 123abc
strtol() returned 123
Further characters after number: abc
$ ./a.out 123abc 55
strtol: Invalid argument
$ ./a.out ''
No digits were found
$ ./a.out 4000000000
strtol: Numerical result out of range
#include <stdlib.h>
#include <limits.h>
#include <stdio.h>
#include <errno.h>
int
main(int argc, char *argv[])
{
int base;
char *endptr, *str;
long val;
if (argc < 2) {
fprintf(stderr, "Usage: %s str [base]\n", argv[0]);
exit(EXIT_FAILURE);
}
str = argv[1];
base = (argc > 2) ? atoi(argv[2]) : 10;
errno = 0; /* νΈμΆ ν μ±κ³΅/μ€ν¨ ꡬλ³μ μν΄ */
val = strtol(str, &endptr, base);
/* κ°λ₯ν μ¬λ¬ μ€λ₯λ€ νμΈ */
if ((errno == ERANGE && (val == LONG_MAX || val == LONG_MIN))
|| (errno != 0 && val == 0)) {
perror("strtol");
exit(EXIT_FAILURE);
}
if (endptr == str) {
fprintf(stderr, "No digits were found\n");
exit(EXIT_FAILURE);
}
/* μ¬κΈ°κΉμ§ μλ€λ©΄ strtol()μμ μλ₯Ό μ±κ³΅μ μΌλ‘ νμ± ν κ²μ */
printf("strtol() returned %ld\n", val);
if (*endptr != '\0') /* λ°λμ μ€λ₯λ μλ... */
printf("Further characters after number: %s\n", endptr);
exit(EXIT_SUCCESS);
}
atof(3), atoi(3), atol(3), strtod(3), strtoul(3), strtoimax(3)
2019-03-06