鉴于我有以下内容:
char str[] = "1524";
int nr;
我想在'nr'中获得数字1524
。
在C中实现这一目标的最佳方法是什么?
答案 0 :(得分: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;
}
发生上溢/下溢时, errno
变为非零
*endptr != '\0'
在最后检测到额外的垃圾
str != endptr
会检测到""
之类的字符串
与INT_MAX
进行比较,INT_MIN
int
在long
和if (errno == ERANGE ...
范围内有所不同。
也许最好做{{1}}。
答案 1 :(得分:4)
答案 2 :(得分:4)
标准库调用是atoi()
,但还有strtol()
,它有一些附加功能。 1)它允许你指定数字基数(如基数10),2)它返回指向它停止解析的字符串中的位置的指针。
两者都在标题<stdlib.h>
答案 3 :(得分:3)
atoi
函数将从字符串转换为整数:
// requires including stdlib.h
int nr = atoi(str);