|
在stdlib.h中主要包含数字字符处理的函数有 atoi(), atof(), strtol(), strtod(),eccvt()等函数及其扩展函数。 他们之间的共同点以及区别在下面功能描述中有说明,要详细了解需看手册和源代码实现。 下面是一个Linux manual 中的example 代码:
#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; /* 为了区分调用是否成功 */ val = strtol(str, &endptr, base);
/* 检测各种可能的错误,溢出或base 包含非法值 */ 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); }
/* 如果能达到这里,strtol 成功解析了一个数字 */ printf("strtol() returned %ld\n", val);
if (*endptr != '\0') /* Not necessarily an error */ printf("Further characters after number: %s\n", endptr);
exit(EXIT_SUCCESS); }
atoi() 和strtol() 函数调用的区别: atoi() 没有错误检测。而strtol()是有错误检测的。 atoi() 不能指定进制基数,一定是10进制;strtol() 可以由base 指定其他进制的。
|