strtol |
| ||||
strtol | |
ヘッダ | #include <stdlib.h> |
形 式 | long strtol(const char *nptr, char **endptr, int base); |
機 能 | nptrが指す文字列の最初の部分を、long型の表現に変換する。 まず始めに、入力文字列を次の三つの部分に分割する。 第1の部分 … isspace関数の規定による空白類文字の並び(空でもよい)。 第2の部分 … baseを基数とする整数と同様の形式の変換対象列。 第3の部分 … 認識の対象とならない文字の1文字以上の末尾の文字列(入力文字列の終端ナル文字を含む)。 次に変換対象列の部分を整数に変換し、その結果を返す。 baseの値が0のとき、変換対象列の認識可能な形式は、整数定数と同じである。ただし、省略可能な先行する正符号または負符号があってもよいが、整数接尾語は含まない。baseの値が2以上36以下であるとき、変換対象列の認識可能な形式は、基数baseで整数を表現する英字および数字の列である。ただし、省略可能な先行する正符号または負符号があってもよいが、整数接尾語は含まない。a(またはA)からz(またはZ)までの英字は、10から35までの値に対応する。baseの値より小さい値に対応する英字だけを許す。baseの値が16のとき、もしあれば符号の後ろ、英字および数字の列の前に省略可能な文字0xまたは0Xがあっても構わない。 変換対象列は、入力文字列中の最初の非空白類文字で始まり、認識可能な形式の最も長い部分列として定義する。入力文字列が空であるか、すべて空白類からなるか、または最初の非空白類文字が符号、許される英字および数字のいずれでもないとき、変換対象列は文字を含まない。 変換対象列が認識可能な形式で、かつbaseの値が0のとき、最初の数字で始まる文字の列を整数定数として解釈する。変換対象列が認識可能な形式で、かつbaseの値が2以上36以下であるとき、それを変換の基数に用い、各英字が上で規定した値に対応するものとして整数に変換する。変換対象列が負符号で始まるとき、変換の結果の値は負となる。endptrが空ポインタでなければ、末尾の文字列へのポインタをendptrが指すオブジェクトに格納する。 "C"ロケール以外では、付加的に処理系定義の変換対象列の形式を受理しても構わない。 変換対象列が空であるかまたは認識可能な形式でないとき、変換は行わない。このとき、endptrが空ポインタでなければ、nptrの値をendptrが指すオブジェクトに格納する。 |
返却値 | 変換に成功すれば変換した値を返し、失敗すれば0を返す。正しい値が表現可能な値の範囲外であるとき、値の符号に従ってLONG_MAXまたはLONG_MINを返すとともにerrnoにマクロERANGEの値を格納する。 |