Atoi回报值

时间:2016-03-01 05:28:47

标签: c arrays dynamic atoi strtol

我对atoi有疑问。我正在尝试使用atoi来检查我是否可以将一个字符转换为一个数字,但是,如果我的数字是0,我该如何绕过它?我知道atoi如果失败则返回0,但如果它起作用,则返回数字的值,在这种情况下,0将属于这两个类别。

如果我改为使用strtol,有没有办法检查数组中的字符是否为> = 0,或者根本不存在。

例如,如果我的动态数组由{1 40 500}组成,并且我尝试strtol在位置8(刚出界),我希望它返回NULL或某些指示atoi / strtol失败

3 个答案:

答案 0 :(得分:2)

您可以改为使用sscanf读出整数,这样只需检查sscanf的返回值,看它是否找到整数

char a[] = "12";
char b[] = "abc";
int n = 0;

assert(sscanf(a, "%d", &n ) == 1);
assert(sscanf(b, "%d", &n ) == 0);

答案 1 :(得分:1)

  

如果我的号码为0,我该如何处理?

首先不使用atoi()。请改为使用strto*()系列函数的成员。

答案 2 :(得分:1)

通过

  

动态数组由{1 40 500}

组成

你的意思是C弦" 1 40 500"?如果是这种情况,那么在空终止(位置8)调用strtol将在第二个参数中返回相同的ptr传递给它:

char *s = "1 40 500";
char *ptr;
strtol(&s[8], &ptr, 10);
if (&s[8] == ptr) {
  // code executed if strtol was called at the null termination
}