鉴于我有以下内容:
char str[] = "1524";
int nr;
Run Code Online (Sandbox Code Playgroud)
我想得到1524'nr'中的数字.
在C中实现这一目标的最佳方法是什么?
chu*_*ica 10
最好的错误检测是 strtol()
#include <errno.h>
#include <stdlib.h>
char str[] = "1524";
char *endptr;
errno = 0;
long l = strtol(str, &endptr, 10);
if (errno || *endptr != '\0' || str == endptr || l < INT_MIN || l > INT_MAX) {
Handle_Error();
}
else {
nr = l;
}
Run Code Online (Sandbox Code Playgroud)
errno发生上溢/下溢时变为非零.
*endptr != '\0'最后检测到额外的垃圾.
str != endptr检测到类似的字符串"".
比较INT_MAX,INT_MIN需要的时间int和long范围不同.
也许更好if (errno == ERANGE ....
使用atoi函数:
nr = atoi(str);
Run Code Online (Sandbox Code Playgroud)
还有atof(对于floats)和atol(对于longs)
所有这些函数都定义在<stdlib.h>.