Code:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <limits.h>
#include <errno.h>
bool parse_int(const char *s, int *value) {
char *end = NULL;
errno = 0;
long n = strtol(s, &end, 10);
if (end == s || end[strspn(end, " \t\r\n")]) {
fprintf(stderr, "parse_int: Non-numeric input.\n");
return false;
}
if (errno || n < INT_MIN || n > INT_MAX) {
fprintf(stderr, "parse_int: Out of range.\n");
return false;
}
*value = (int)n;
return true;
}
int main(int argc, char **argv) {
if (argc != 3) {
fprintf(stderr, "Usage: prog a b\n");
return EXIT_FAILURE;
}
int a, b;
if (!parse_int(argv[1], &a) ||
!parse_int(argv[2], &b)) {
fprintf(stderr, "Bad arguments.\n");
return EXIT_FAILURE;
}
printf("Arguments: %d, %d\n", a, b);
return 0;
}