#include <stdlib.h>
long int strtol(const char *nptr, char **endptr, int base);
double strtod(const char *nptr, char **endptr);
返回值:转换结果,出错时设置errno
- 不仅可以识别十进制整数,还可以识别其它进制的整数,取决于
base
参数,比如strtol("0XDEADbeE~~", NULL, 16)
返回0xdeadbee的值,strtol("0777~~", NULL, 8)
返回0777的值。 endptr
是一个传出参数,函数返回时指向后面未被识别的第一个字符。例如char *pos; strtol("123abc", &pos, 10);
,strtol
返回123,pos
指向字符串中的字母a。如果字符串开头没有可识别的整数,例如char *pos; strtol("ABCabc", &pos, 10);
,则strtol
返回0,pos
指向字符串开头,可以据此判断这种出错的情况,而这是atoi
处理不了的。- 如果字符串中的整数值超出
long int
的表示范围(上溢或下溢),则strtol
返回它所能表示的最大(或最小)整数,并设置errno
为ERANGE
,例如strtol("0XDEADbeef~~", NULL, 16)
返回0x7fffffff并设置errno
为ERANGE
。