File tree Expand file tree Collapse file tree 1 file changed +77
-0
lines changed Expand file tree Collapse file tree 1 file changed +77
-0
lines changed Original file line number Diff line number Diff line change 1+ # strtol
2+ * cstdlib[ meta header]
3+ * std[ meta namespace]
4+ * function[ meta id-type]
5+
6+ ``` cpp
7+ namespace std {
8+ long int strtol(const char* nptr, char** endptr, int base);
9+ }
10+ ```
11+
12+ ## 概要
13+ 文字列`nptr`を`long`型の整数に変換する。変換時には`base`で指定された基数に従って解釈される。
14+
15+ `endptr`が非`nullptr`の場合、変換が終了した位置の文字へのポインタがそこに格納される。
16+
17+ 基数`base`は 2~36 または 0 の値を取る。
18+
19+ `base`が0の場合
20+ - 文字列の先頭が`0`の場合は8進数
21+ - 先頭が`0x`、`0X`は16進数
22+ - その他の場合は10進数として変換される。
23+
24+ 変換は次のように行われる
25+ - 先頭の空白文字は最初の非空白文字から変換される。
26+ - `+`または`-`が先頭にある場合は、符号として解釈される。
27+ - その後の文字列を、指定された`base`に基づいて整数値に変換する。
28+
29+
30+ ## 戻り値
31+ - 変換可能ならば変換後の数値。
32+
33+ - 変換後の数値が`long`の範囲外の場合、`LONG_MAX`または `LONG_MIN`。
34+
35+ - 変換不可能なら`0`を返す。
36+
37+ ## 備考
38+ この関数はスレッドセーフである。
39+
40+
41+
42+ ## 例
43+ ```cpp example
44+ #include <iostream>
45+ #include <cstdlib>
46+ #include <cerrno>
47+ #include <climits>
48+
49+ int main() {
50+ const char* str = " -0x2Fabc";
51+
52+ errno = 0;
53+ long result1 = std::strtol(str, nullptr, 0); // 自動判別
54+ std::cout << "変換結果(基数0): " << result1 << std::endl;
55+
56+ errno = 0;
57+ long result2 = std::strtol(str, nullptr, 10); // 10進数として解釈
58+ std::cout << "変換結果(基数10): " << result2 << std::endl;
59+
60+ errno = 0;
61+ long result3 = std::strtol(str, nullptr, 36); // 36進数として解釈
62+ std::cout << "変換結果(基数36): " << result3 << std::endl;
63+
64+ return 0;
65+ }
66+ ```
67+ ### 出力
68+ ```
69+ 変換結果(基数0): -195260
70+ 変換結果(基数10): 0
71+ 変換結果(基数36): -1999456248
72+ ```
73+
74+ ## 関連項目
75+ - [ ` strtoll ` ] ( strtoll.md.nolink ) : 文字列を、基数を指定して` long long ` 型に変換する
76+ - [ ` strtoul ` ] ( strtoul.md.nolink ) : 文字列を、基数を指定して` unsigned long ` 型に変換する
77+ - [ ` strtoull ` ] ( strtoull.md.nolink ) : 文字列を、基数を指定して` unsigned long long ` 型に変換する
You can’t perform that action at this time.
0 commit comments