Rechercher une page de manuel
strtol
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)Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre