From anonymous, 2 Months ago, written in C.
Embed
  1.        #include <stdlib.h>
  2.        #include <limits.h>
  3.        #include <stdio.h>
  4.        #include <errno.h>
  5.  
  6.        int
  7.        main(int argc, char *argv[])
  8.        {
  9.            int base;
  10.            char *endptr, *str;
  11.            long val;
  12.  
  13.            if (argc < 2) {
  14.                fprintf(stderr, "Usage: %s str [base]\n", argv[0]);
  15.                exit(EXIT_FAILURE);
  16.            }
  17.  
  18.            str = argv[1];
  19.            base = (argc > 2) ? atoi(argv[2]) : 10;
  20.  
  21.            errno = 0;    /* To distinguish success/failure after call */
  22.            val = strtol(str, &endptr, base);
  23.  
  24.            /* Check for various possible errors */
  25.  
  26.            if ((errno == ERANGE && (val == LONG_MAX || val == LONG_MIN))
  27.                    || (errno != 0 && val == 0)) {
  28.                perror("strtol");
  29.                exit(EXIT_FAILURE);
  30.            }
  31.  
  32.            if (endptr == str) {
  33.                fprintf(stderr, "No digits were found\n");
  34.                exit(EXIT_FAILURE);
  35.            }
  36.  
  37.            /* If we got here, strtol() successfully parsed a number */
  38.  
  39.            printf("strtol() returned %ld\n", val);
  40.  
  41.            if (*endptr != '\0')        /* Not necessarily an error... */
  42.                printf("Further characters after number: %s\n", endptr);
  43.  
  44.            exit(EXIT_SUCCESS);
  45.        }
  46.