Skip to content

Commit 090865f

Browse files
committed
new page strtol.md
1 parent 635bc5a commit 090865f

File tree

1 file changed

+77
-0
lines changed

1 file changed

+77
-0
lines changed

reference/cstdlib/strtol.md

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
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`型に変換する

0 commit comments

Comments
 (0)