это всё ненадёжно. integer("123garbage") вернёт 123, и вы даже не узнаете, что была ошибка. Надо так:
| Код | /* check strtol()/strtod() result */ static int strtox_check(char *nptr, char *endptr) { char dummys[2]; /* Check for various possible errors */
/* if ((errno == ERANGE && (*n == LONG_MAX || *n == LONG_MIN)) || (errno != 0 && *n == 0)) { */ if (errno != 0) { /*pdebug8("strtol(): failed\n");*/ return errno; }
/*pdebug8("strtol(): nptr: '%s', endptr: '%s'\n", nptr, endptr);*/
if (nptr == endptr) { /*pdebug8("strtol(): No digits were found\n");*/ return -1; }
/* If we got here, strtol() successfully parsed a number */
if (*endptr != '\0' && *endptr != '\n' && sscanf(endptr, "%1s", dummys)>0) { /*pdebug8("strtol(): Further characters after number: %s\n", endptr);*/ return -1; }
return 0; }
int main() { char *endptr; char str[] = "123garbage"; long l = strtol(str, &endptr, 10); if (0 != strtox_check(str, endptr)) { printf("bad number: '%s'\n", str); return 1; } }
|
|