EN JA
STRTONUM(3)
STRTONUM(3) FreeBSD Library Functions Manual STRTONUM(3)

名称

strtonum文字列値を整数に確実に変換する

書式

#include < stdlib.h>

long long
strtonum( const char *nptr, long long minval, long long maxval, const char **errstr);

解説

strtonum() 関数は、 nptr 中の文字列を long long 値に変換します。 strtonum() 関数は、安全性を促進し、プログラミングを頑強にして、 atoi(3)strtol(3) ファミリインタフェースの短所を克服するように設計されています。

文字列は、単一の省略可能な‘ +’または‘ -’サインが続く、 ( isspace(3) によって決定されるような) 空白類の任意の量で始まるるかもしれません。

文字列の残りは、10 進数として long long 値に変換されます。

そして、得られた値は、提供された minvalmaxval 範囲に対してチェックされます。 errstr が NULL でなければ、 strtonum() は、失敗を示す *errstr にエラー文字列を格納します。

戻り値

strtonum() 関数は、値が提供された範囲を超えないか、無効でないなら変換の結果を返します。エラーであれば、0 を返して、 errno を設定し、 errstr は、エラーメッセージを指します。成功すれば *errstr は、 NULL に設定されます。この事実は、エラーと成功して 0 を返すことを区別するために使用することができます。

使用例

strtonum() を正しく使用することは、代わりの関数より簡単でとなるように意図されています。

int iterations; 
const char *errstr; 
 
iterations = strtonum(optarg, 1, 64, &errstr); 
if (errstr != NULL) 
 errx(1, "number of iterations is %s: %s", errstr, optarg);

上記の例は、繰り返しの値が 1 と 64 (包括的) の間あることを保証します。

エラー

[ ERANGE]
与えられた文字列が範囲外です。
[ EINVAL]
与えられた文字列が単一の数値文字から構成されていませんでした。
[ EINVAL]
供給された minvalmaxval より大きかった。

エラーが発生すると、 errstr は、次の文字列の 1 つに設定されます:

too large
結果が提供された最大値より大きかった。
too small
結果が提供された最小値より小さかった。
invalid
文字列が単一の数値文字から構成されていませんでした。

規格

strtonum() 関数は、 BSD の拡張です。 atoi(3)strtol(3) のような、既存の代替手段は、不可能であるか、または安全に使用するのが難しいです。

歴史

strtonum() 関数は、 OpenBSD 3.6 ではじめて登場しました。
April 29, 2004 FreeBSD