| 標準/拡張機能 | C/C++ | 依存項目 |
|---|---|---|
ISO C |
両方 |
#include <stdlib.h>
long int strtol(const char * __restrict__nptr, char ** __restrict__endptr, int base);
文字ストリング nptr を、long int 値に変換します。
基数がゼロより大きい場合には、サブジェクト・シーケンス には、正符号または負符号のどちらかが前にあると考えられる 10 進数字および文字が含まれます。文字 a (または A) ~ z (または Z) により、10 ~ 36 の値が表されますが、基数の値より小さい値の文字だけが許可されます。
>>-+-------------+--+-----+--+----+--+--------+---------------->< '-white space-' +- + -+ +-0--+ '-digits-' '- - -' +-0x-+ '-0X-'
endptr が NULL 以外のポインターであるかぎり、変換が たとえ正常に実行されなかったとしても、変換文字のポインターは、endptr で示されるオブジェクトに保管されます。
正常に実行された場合、strtol() は、変換後の long int 値を戻します。
正常に実行されなかった場合、変換が実行できないと、strtol() は 0 を戻します。正しい値が表現可能な値の範囲外である場合、strtol() は値の符号に応じて LONG_MAX または LONG_MIN を戻します。基数の値がサポートされない場合、strtol() は 0 を戻します。
正常に実行されなかった場合、strtol() は errno を次のいずれかの 値に設定します。
⁄* CELEBS55
This example converts the strings to a long.
It prints out the converted value and the substring that
stopped the conversion.
*⁄
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char *string, *stopstring;
long l;
int bs;
string = "10110134932";
printf("string = %s¥n", string);
for (bs = 2; bs <= 8; bs *= 2)
{
l = strtol(string, &stopstring, bs);
printf(" strtol = %ld (base %d)¥n", l, bs);
printf(" Stopped scan at %s¥n¥n", stopstring);
}
}
string = 10110134932
strtol = 45 (base 2)
Stopped scan at 34932
strtol = 4423 (base 4)
Stopped scan at 4932
strtol = 2134108 (base 8)
Stopped scan at 932