strtol

Autres langues

Langue: ja

Version: 2002-02-22 (openSuse - 09/10/07)

Section: 3 (Bibliothèques de fonctions)

̾Á°

strtol, strtoll, strtoq - ʸ»úÎó¤ò long int ¤ËÊÑ´¹¤¹¤ë

½ñ¼°


#include <stdlib.h>



long int

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



long long int

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

ÀâÌÀ

strtol() ´Ø¿ô¤Ï¡¢ nptr ¤Îʸ»úÎó¤ÎºÇ½é¤ÎÉôʬ¤ò¡¢ base ¤ò´ð¿ô¤È¤·¤Æ long int ¤ËÊÑ´¹¤¹¤ë¡£ ¤³¤Î base ¤Ï 2 ¤«¤é 36 ¤Þ¤Ç¤ÎÃÍ ¤¢¤ë¤¤¤ÏÆÃÊ̤ʰÕÌ£¤ò»ý¤ÄÃÍ 0 ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£

ʸ»úÎó¤ÎÀèƬ¤Ë¤Ï¡¢Ç¤°Õ¤Î¿ô¤Î¶õÇò¤¬¤¢¤Ã¤Æ¤â¤è¤¯ (¶õÇò¤Ï isspace(3) ¤ÇȽÄꤵ¤ì¤ë)¡¢¤Þ¤¿¿ô»ú¤ÎľÁ°¤Ë¤Ï `+' ¤« `-' ¤Î Éä¹æ¤¬¤¢¤Ã¤Æ¤â¤è¤¤¡£ base ¤¬ 0 ¤Þ¤¿¤Ï 16 ¤Î¾ì¹ç¤Ë¤Ï¡¢Ê¸»úÎó¤ÎÀèƬ¤Ë `0x' ¤òÃÖ¤¯¤³¤È¤¬ ¤Ç¤­¡¢¤½¤Î¾ì¹ç¤Ë¤Ïʸ»úÎó¤Ï 16¿Ê¿ô¤È¤·¤Æ°·¤ï¤ì¤ë¡£ ¤³¤ì°Ê³°¤Îʸ»úÎó¤Ç base ¤¬ 0 ¤Î¾ì¹ç¤Ï¡¢ ʸ»úÎó¤¬ `0' ¤Ç»Ï¤Þ¤ë¤È¤­¤Ï 8¿Ê¿ô¤È¤·¤Æ¡¢ ¤½¤ì°Ê³°¤Î¤È¤­¤Ï 10¿Ê¿ô¤È¤·¤Æ°·¤ï¤ì¤ë¡£

¿ô»ú¤òɽ¤¹Ê¸»úÎó¤Ï long int ¤ËÊÑ´¹¤µ¤ì¤ë¤¬¡¢´ð¿ô¤ËÂФ·¤Æ Í­¸ú¤Ç¤Ê¤¤¿ô»ú¤¬¸½¤ì¤¿»þÅÀ¤ÇÊÑ´¹¤Ï½ªÎ»¤¹¤ë¡£(11¿Ê¿ô°Ê¾å¤Ç¤Ï `A' ¤Ï Âçʸ»ú¡¦¾®Ê¸»ú¤Ë´Ø¤ï¤é¤º 10 ¤òɽ¤·¡¢ `B' ¤Ï 11 ¤òɽ¸½¤·¡¢ °Ê²¼Æ±Íͤˡ¢ `Z' ¤Ï 35 ¤òɽ¤¹¡£)

endptr ¤¬¥Ì¥ëÃÍ (NULL) ¤Ç¤Ê¤¤¾ì¹ç¤Ï¡¢ºÇ½é¤Ë¸½¤ì¤¿ÉÔÀµ¤Êʸ»ú¤¬ strtol() ¤Ë¤è¤Ã¤Æ *endptr ¤ËÊݸ¤µ¤ì¤Æ¤¤¤ë¡£ ʸ»úÎó¤ËÍ­¸ú¤Ê¿ô»ú¤¬¤Ò¤È¤Ä¤â¤Ê¤±¤ì¤Ð¡¢ strtol() ¤Ï nptr ¤Î¸µ¤ÎÃͤò *endptr ¤ËÂåÆþ¤¹¤ë (¤½¤·¤Æ 0 ¤òÊÖ¤¹)¡£ Æäˡ¢*nptr ¤¬ `\0' °Ê³°¤Ç¡¢ÊÖ¤µ¤ì¤¿ **endptr ¤¬ `\0' ¤Ê¤é¤Ð¡¢Ê¸»úÎóÁ´ÂΤ¬Í­¸ú¤À¤Ã¤¿¤³¤È¤Ë¤Ê¤ë¡£

strtoll() ´Ø¿ô¤Ï strtol() ¤ÈƱÍͤÀ¤¬¡¢long long int ·¿¤ÎÃͤòÊÖ¤¹¡£

ÊÖ¤êÃÍ

¥¢¥ó¥À¡¼¥Õ¥í¡¼¤â¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤âµ¯¤­¤Ê¤«¤Ã¤¿¾ì¹ç¡¢ strtol() ´Ø¿ô¤Ï ÊÑ´¹¤µ¤ì¤¿ÃͤòÊÖ¤¹¡£¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤·¤¿¾ì¹ç¤Ë¤Ï LONG_MAX ¤¬Ê֤ꡢ ¥¢¥ó¥À¡¼¥Õ¥í¡¼¤·¤¿¾ì¹ç¤Ë¤Ï LONG_MIN ¤¬Ê֤롣¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¡¢ ¥¢¥ó¥À¡¼¥Õ¥í¡¼¤Î¤¤¤º¤ì¤Î¾ì¹ç¤Ë¤â Âç°èÊÑ¿ô errno ¤Ë¤Ï ERANGE ¤¬ÀßÄꤵ¤ì¤ë¡£ strtoll() ¤âƱÍͤǤ¢¤ë¤¬¡¢LONG_MIN ¤È LONG_MAX ¤ÎÂå¤ï¤ê¤Ë LLONG_MIN ¤È LLONG_MAX ¤¬ ÊÖ¤µ¤ì¤ë¡£

¥¨¥é¡¼

EINVAL
(C99 ¤Ë¤Ï¤Ê¤¤) base ¤¬Âбþ¤·¤Æ¤¤¤Ê¤¤ÃͤǤ¢¤ë¡£
ERANGE
·ë²Ì¤ÎÃͤ¬Èϰϳ°¤Ç¤¢¤ë¡£

¼ÂÁõ¤Ë¤è¤Ã¤Æ¤Ï¡¢ÊÑ´¹¤¬¹Ô¤ï¤ì¤Ê¤«¤Ã¤¿¾ì¹ç (¿ô»ú¤¬¤Ê¤¯¡¢0 ¤òÊÖ¤·¤¿¾ì¹ç)¡¢ errno ¤Ë EINVAL ¤¬ÀßÄꤵ¤ì¤ë¾ì¹ç¤¬¤¢¤ë¡£

½àµò

strtol() ¤Ï SVr4, 4.3BSD, C89, C99 ¤È POSIX.1-2001 ¤Ë½àµò¤·¤Æ¤¤¤ë¡£ strtoll() ¤Ï C99 ¤È POSIX.1-2001 ¤Ë½àµò¤·¤Æ¤¤¤ë¡£

Ãí°Õ

strtol () ¤«¤é¤ÏÀ®¸ù¡¢¼ºÇԤɤÁ¤é¤Î¾ì¹ç¤Ç¤â 0, LONG_MAX, LONG_MIN (strtoll() ¤Ç¤Ï LLONG_MAX, LLONG_MIN) ¤¬ÊÖ¤ë²ÄǽÀ­¤¬¤¢¤ë¤Î¤Ç¡¢ ¥×¥í¥°¥é¥à¤Ï´Ø¿ô¤ò¸Æ¤Ó½Ð¤¹Á°¤Ë errno ¤ò 0 ¤ËÀßÄꤷ¡¢¸Æ¤Ó½Ð¤·¸å¤Ë errno ¤¬ 0 °Ê³°¤ÎÃͤ«¤É¤¦¤«¤ò³Îǧ¤·¥¨¥é¡¼¤¬È¯À¸¤·¤¿¤«¤É¤¦¤«¤òȽÃǤ¹¤ë ɬÍפ¬¤¢¤ë¡£

"C" °Ê³°¤Î¥í¥±¡¼¥ë¤Î¾ì¹ç¡¢¤½¤Î¾¤Îʸ»úÎó¤â¼õ¤±ÉÕ¤±¤é¤ì¤ë¤«¤â¤·¤ì¤Ê¤¤¡£ (Î㤨¤Ð¡¢¸½ºß¤Î¥í¥±¡¼¥ë¤Î 1000 Ëè¤Î¶èÀÚ¤êʸ»ú¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¤«¤â¤·¤ì¤Ê¤¤¡£)

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]) : 10;



    errno = 0;    /* To distinguish success/failure after call */

    val = strtol(str, &endptr, base);



    /* Check for various possible errors */



    if ((errno == ERANGE && (val == LONG_MAX || val == LONG_MIN))

            || (errno != 0 && val == 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), strtoul(3)