Man page - strtoq(3)

Packages contains this manual

Available languages:

en fr nl ja

Manual

STRTOL

名 前
書 åŧ
čĒŦ 明
čŋ” り 値
エ ナ ãƒŧ
åąž 性
æē– 拠
æŗ¨ 意
例
プ ロ グ ナ ム ぎ ã‚Ŋ ãƒŧ ゚
é–ĸ 逪 項 į›Ž
こ ぎ 文 書 ãĢ つ い ãĻ

名 前

strtol, strtoll, strtoq - 文 字 列 を long int ãĢ 変 換 す る

書 åŧ

#include <stdlib.h>

long strtol(const char * nptr , char ** endptr , int base );

long long strtoll(const char * nptr , char ** endptr , int base );

glibc 向 け ぎ 抟 čƒŊ 検 æŸģ マ ク ロ ぎ čρ äģļ ( feature_test_macros (7) 参 į…§ ):

strtoll ():

_ISOC99_SOURCE
|| /* Glibc versions <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE

čĒŦ 明

strtol () é–ĸ 数 は 、 nptr ぎ 文 字 列 ぎ 最 初 ぎ 部 分 を 、 base を åŸē 数 と し ãĻ long int ãĢ 変 換 す る 。 こ ぎ base は 2 か ら 36 ぞ で ぎ 値 あ る い は į‰š åˆĨ ãĒ 意 呺 を 持 つ 値 0 で ãĒ け れ ば ãĒ ら ãĒ い 。

文 字 列 ぎ 先 é ­ ãĢ は 、 äģģ æ„ ぎ 数 ぎ įŠē į™Ŋ が あ ãŖ ãĻ も よ く (įŠē į™Ŋ は isspace (3) で 判 厚 さ れ る )、 ぞ た 数 字 ぎ į›´ 前 ãĢ は '+' か '-' ぎ įŦĻ åˇ が あ ãŖ ãĻ も よ い 。 base が 0 ぞ た は 16 ぎ å ´ 合 ãĢ は 、 文 字 列 ぎ 先 é ­ ãĢ "0x" か "0X" を įŊŽ ã こ と が で き 、 そ ぎ å ´ 合 ãĢ は 文 字 列 は 16進 数 と し ãĻ æ‰ą わ れ る 。 こ れ äģĨ 外 ぎ 文 字 列 で base が 0 ぎ å ´ 合 は 、 文 字 列 が '0' で 始 ぞ る と き は 8進 数 と し ãĻ 、 そ れ äģĨ 外 ぎ と き は 10進 数 と し ãĻ æ‰ą わ れ る 。

数 字 を 襨 す 文 字 列 は long ãĢ 変 換 さ れ る が 、 åŸē 数 ãĢ 寞 し ãĻ 有 劚 で ãĒ い 数 字 が įž れ た 時 į‚š で 変 換 は įĩ‚ äē† ã™ る 。 (11進 数 äģĨ 上 で は 'A' は 大 文 字 ãƒģ 小 文 字 ãĢ é–ĸ わ ら ず 10 を 襨 し 、 'B' は 11 を 襨 įž し 、 äģĨ 下 同 様 ãĢ 、 'Z' は 35 を 襨 す 。 )

endptr が ヌ ãƒĢ 値 (NULL) で ãĒ い å ´ 合 は 、 最 初 ãĢ įž れ た 不 æ­Ŗ ãĒ 文 字 が strtol () ãĢ よ ãŖ ãĻ *endptr ãĢ äŋ 存 さ れ ãĻ い る 。 文 字 列 ãĢ 有 劚 ãĒ 数 字 が ã˛ と つ も ãĒ け れ ば 、 strtol () は nptr ぎ 元 ぎ 値 を *endptr ãĢ äģŖ å…Ĩ す る (そ し ãĻ 0 を čŋ” す )。 į‰š ãĢ 、 *nptr が '\0' äģĨ 外 で 、 čŋ” さ れ た **endptr が '\0' ãĒ ら ば 、 文 字 列 全 äŊ“ が 有 劚 だ ãŖ た こ と ãĢ ãĒ る 。

strtoll () é–ĸ 数 は strtol () と 同 様 だ が 、 long long 型 ぎ 値 を čŋ” す 。

čŋ” り 値

ã‚ĸ ãƒŗ ダ ãƒŧ フ ロ ãƒŧ も ã‚Ē ãƒŧ バ ãƒŧ フ ロ ãƒŧ も čĩˇ き ãĒ か ãŖ た å ´ 合 、 strtol () é–ĸ 数 は 変 換 さ れ た 値 を čŋ” す 。 ã‚Ē ãƒŧ バ ãƒŧ フ ロ ãƒŧ し た å ´ 合 ãĢ は LONG_MAX が čŋ” り 、 ã‚ĸ ãƒŗ ダ ãƒŧ フ ロ ãƒŧ し た å ´ 合 ãĢ は LONG_MIN が čŋ” る 。 ã‚Ē ãƒŧ バ ãƒŧ フ ロ ãƒŧ 、 ã‚ĸ ãƒŗ ダ ãƒŧ フ ロ ãƒŧ ぎ い ず れ ぎ å ´ 合 ãĢ も 大 域 変 数 errno ãĢ は ERANGE が 設 厚 さ れ る 。 strtoll () も 同 様 で あ る が 、 LONG_MIN と LONG_MAX ぎ äģŖ ã‚ り ãĢ LLONG_MIN と LLONG_MAX が čŋ” さ れ る 。

エ ナ ãƒŧ

EINVAL

(C99 ãĢ は ãĒ い ) 指 厚 さ れ た base が ã‚ĩ ポ ãƒŧ ト さ れ ãĻ い ãĒ い 値 で あ る 。

ERANGE

įĩ 果 ぎ 値 が ᝄ 回 外 で あ る 。

原 čŖ… ãĢ よ ãŖ ãĻ は 、 変 換 が 行 わ れ ãĒ か ãŖ た å ´ 合 (数 字 が ãĒ く 、 0 を čŋ” し た å ´ 合 )、 errno ãĢ EINVAL が 設 厚 さ れ る å ´ 合 が あ る 。

åąž 性

こ ぎ ᝀ で äŊŋ ᔍ さ れ ãĻ い る ᔍ čĒž ぎ čĒŦ 明 ãĢ つ い ãĻ は 、 attributes (7) を 参 į…§ 。

Image grohtml-20936-1.png

æē– 拠

strtol (): POSIX.1-2001, POSIX.1-2008, C89, C99 SVr4, 4.3BSD.

strtoll (): POSIX.1-2001, POSIX.1-2008, C99.

æŗ¨ 意

strtol () か ら は 成 功 、 å¤ą 敗 お ãĄ ら ぎ å ´ 合 で も 0, LONG_MAX , LONG_MIN ( strtoll () で は LLONG_MAX , LLONG_MIN ) が čŋ” る 可 čƒŊ 性 が あ る ぎ で 、 プ ロ グ ナ ム は é–ĸ 数 を å‘ŧ ãŗ å‡ē す 前 ãĢ errno を 0 ãĢ 設 厚 し 、 å‘ŧ ãŗ å‡ē し 垌 ãĢ errno が 0 äģĨ 外 ぎ 値 か お う か を įĸē čĒ し エ ナ ãƒŧ が į™ē į”Ÿ し た か お う か を 判 断 す る åŋ… čρ が あ る 。

POSIX.1 で は 、 "C" と "POSIX" äģĨ 外 ぎ ロ ã‚ą ãƒŧ ãƒĢ で は 、 こ れ ら ぎ é–ĸ 数 は 、 äģ– ãŽ 原 čŖ… 時 ãĢ 厚 įžŠ さ れ る 数 字 を į¤ē す 文 字 列 を 受 け äģ˜ ã‘ る と さ れ ãĻ い る 。

BSD ãĢ は 、

quad_t strtoq(const char * nptr , char ** endptr , int base );

と い う 厌 全 ãĢ 同 様 ぎ 厚 įžŠ を 持 つ é–ĸ 数 が あ る 。 äŊŋ ᔍ 中 ぎ ã‚ĸ ãƒŧ キ テ ク チ ãƒŖ ãƒŧ ぎ ワ ãƒŧ ド 長 æŦĄ įŦŦ で あ る が 、 こ ぎ é–ĸ 数 は strtoll () か strtol () と į­‰ 䞥 と ãĒ る こ と も あ る 。

例

äģĨ 下 ぎ プ ロ グ ナ ム は strtol () ぎ äŊŋ ᔍ 例 で あ る 。 最 初 ぎ ã‚ŗ マ ãƒŗ ド ナ イ ãƒŗ åŧ• 数 ãĢ は strtol () が 数 字 と し ãĻ č§Ŗ 釈 す る 文 字 列 を 指 厚 す る 。 (ᜁ į•Ĩ 可 čƒŊ ãĒ ) äēŒ į•Ē į›Ž ぎ åŧ• 数 ãĢ は 変 換 ãĢ äŊŋ ᔍ さ れ る åŸē 数 を 指 厚 す る (こ ぎ åŧ• 数 は atoi (3) を äŊŋ ãŖ ãĻ 数 値 ãĢ 変 換 さ れ る 。 atoi (3) は strtol () よ り も į°Ą 単 ãĒ イ ãƒŗ ã‚ŋ ãƒŧ フ ェ ãƒŧ ゚ を 持 つ é–ĸ 数 で 、 そ ぎ 中 で は エ ナ ãƒŧ チ ェ ッ ク は 行 わ れ ãĒ い )。 こ ぎ プ ロ グ ナ ム ぎ 原 行 例 を い く つ か äģĨ 下 ãĢ į¤ē す :

$ ./a.out 123
strtol() returned 123
$ ./a.out ' 123'
strtol() returned 123
$ ./a.out 123abc
strtol() returned 123
Further characters after number: "abc"
$ ./a.out 123abc 55
strtol: Invalid argument
$ ./a.out ''
No digits were found
$ ./a.out 4000000000
strtol: Numerical result out of range

プ ロ グ ナ ム ぎ ã‚Ŋ ãƒŧ ゚

#include <stdlib.h>
#include <limits.h>
#include <stdio.h>
#include <errno.h>

int
main(int argc, char *argv[])
{
int base;
char *endptr, *str;
long val;

if (argc < 2) {
fprintf(stderr, "Usage: %s str [base]\n", argv[0]);
exit(EXIT_FAILURE);
}

str = argv[1];
base = (argc > 2) ? atoi(argv[2]) : 0;

errno = 0; /* To distinguish success/failure after call */
val = strtol(str, &endptr, base);

/* Check for various possible errors */

if (errno != 0) {
perror("strtol");
exit(EXIT_FAILURE);
}

if (endptr == str) {
fprintf(stderr, "No digits were found\n");
exit(EXIT_FAILURE);
}

/* If we got here, strtol() successfully parsed a number */

printf("strtol() returned %ld\n", val);

if (*endptr != '\0') /* Not necessarily an error... */
printf("Further characters after number: \"%s\"\n", endptr);

exit(EXIT_SUCCESS);
}

é–ĸ 逪 項 į›Ž

atof (3), atoi (3), atol (3), strtod (3), strtoimax (3), strtoul (3),

こ ぎ 文 書 ãĢ つ い ãĻ

こ ぎ man ペ ãƒŧ ジ は Linux man-pages プ ロ ジ ェ ク ト ぎ ãƒĒ ãƒĒ ãƒŧ ゚ 5.10 ぎ 一 部 で あ る 。 プ ロ ジ ェ ク ト ぎ čĒŦ 明 と バ グ å ą 告 ãĢ é–ĸ す る 情 å ą は https://www.kernel.org/doc/man-pages/ ãĢ 書 か れ ãĻ い る 。