鉴于我有以下内容:
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
(对于float
s)和atol
(对于long
s)
所有这些函数都定义在<stdlib.h>
.