Strtol

strtol (string to long integer) およびstrtoul (string to unsigned long integer) とは、それぞれ引数の文字列をC言語の符号付き長整数型および符号無し長整数型に変換する標準Cライブラリの関数である。ヘッダーファイル<stdlib.h>に宣言されている。

 形式 
#include <stdlib.h>
long int strtol(const char *nptr, char **endptr, int base);
unsigned long int strtoul(const char *nptr, char **endptr, int base);

C99以降は以下のようなプロトタイプであるISO/IEC 9899:1999(E) / §7.20.1.4 The strtol, strtoll, strtoul, and strtoull functions。
long int strtol(const char * restrict nptr, char ** restrict endptr, int base);
unsigned long int strtoul(const char * restrict nptr, char ** restrict endptr, int base);

 機能 
 文字列 
第1引数nptrの文字列では、+もしくは-の後に、以下のものを1つ以上続けて書くことができる。
 0から9の数字
 AからZまたはaからzのアルファベット文字
符号は省略することもできる。

また、第3引数baseで、2から36までの基数を指定することができる。baseが0の場合は、数字またはアルファベット文字部分の先頭で判断する。
 0xで始まる場合、16進数とみなす。
 0で始まる場合、8進数とみなす。
 それ以外の場合は、10進数とする。

文字列先頭に空白があった場合は無視される。

第2引数endptrがNULLでない場合、endptrが指しているアドレスに変換終了位置へのポインタが保存される。

 戻り値 
変換が成功した場合は、変換した値を返す。

変換に失敗した場合、0を返す。

正しい値が表現可能な範囲に収まらない場合、strtolはLONG_MINもしくはLONG_MAXを返す。strtoulはULONG_MAXを返す。また、errnoにERANGEが設定される。

シーケンスがマイナス符号-で始まる場合、変換結果は数値部分の絶対値を戻り値の型において符号反転させたものとなる。このため、strtoulは数値部分の絶対値がULONG_MAX以下であれば変換が成功し、シーケンスがマイナス符号で始まる場合は型において単項のマイナス演算子-が適用された結果（ラップアラウンドした値）が返却される。

 strtoll/strtoull, strtoimax/strtoumax 
C99以降は、以下のような変換関数も規定されている。

#include <stdlib.h>
long long int strtoll(const char * restrict nptr, char ** restrict endptr, int base);
unsigned long long int strtoull(const char * restrict nptr, char ** restrict endptr, int base);

#include <inttypes.h>
intmax_t strtoimax(const char * restrict nptr, char ** restrict endptr, int base);
uintmax_t strtoumax(const char * restrict nptr, char ** restrict endptr, int base);

 strtoll: 戻り値が型で、範囲外の場合にLLONG_MINまたはLLONG_MAXを返す。
 strtoull: 戻り値が型で、範囲外の場合にULLONG_MAXを返す。
 strtoimax: 戻り値が型で、範囲外の場合にINTMAX_MINまたはINTMAX_MAXを返す。
 strtoumax: 戻り値が型で、範囲外の場合にUINTMAX_MAXを返す。

とは少なくとも64ビットの値を表現できることが規格で保証される。

とは<stdint.h>で定義されている型で、それぞれ処理系で表現可能なあらゆる符号付き整数値または符号無し整数値を格納できる型である。

 atoi/atol 
類似の機能を持つ標準関数にatoiやatolなどがあるが、こちらはエラーが発生した場合の動作が規定されておらず、strtolなどと比べて堅牢性に欠けるため、atoiやatolを非推奨としているガイドラインもあるMSC24-C. 非推奨関数や時代遅れの関数を使用しないERR07-C. よりよいエラー検査を行える関数を使用するINT06-C. 文字列トークンを整数に変換するには strtol() 系の関数を使う。

 脚注 

 出典 

 関連項目 
C言語
標準Cライブラリ
atoi
atol

 外部リンク 
 strtol, strtoll - cppreference.com
 strtoul, strtoull - cppreference.com
 strtoimax, strtoumax - cppreference.com
 strtol(3) - Linux man page
 strtoul(3) - Linux man page
 strtol(3) | FreeBSD Manual Pages
 strtoul(3) | FreeBSD Manual Pages
 strtol, wcstol, _strtol_l, _wcstol_l | Microsoft Learn
 strtoll, _strtoll_l, wcstoll, _wcstoll_l | Microsoft Learn
 strtoul, _strtoul_l, wcstoul, _wcstoul_l | Microsoft Learn
 strtoull, _strtoull_l, wcstoull, _wcstoull_l | Microsoft Learn
 strtoimax, _strtoimax_l, wcstoimax, _wcstoimax_l | Microsoft Learn
 strtoumax, _strtoumax_l, wcstoumax, _wcstoumax_l | Microsoft Learn

Category:標準Cライブラリ