2016-03-01 165 views
1

我有一个关于atoi的问题。我正在尝试使用atoi来检查是否可以将字符转换为数字,但是,如果我的数字为0,我该如何解决这个问题?我知道atoi如果失败返回0,但是如果它工作,它也返回数字的值,在这种情况下,0将归入这两个类别。Atoi返回值

如果我要使用strtol代替,有没有办法检查数组中的字符是否大于等于0,或者根本不存在/不存在。例如,如果我的动态数组由{1 40 500}组成,并且我尝试在位置8(刚好超出边界)进行测试,我希望它返回NULL或者表明atoi/strtol失败

+2

有了'strtol',你可以使用'endptr'到确定转换是否成功。 – user3386109

+1

你的意思是“1 40 500”吗? –

+2

请参阅[正确使用'strtol()']的方法(https://stackoverflow.com/questions/14176123/correct-usage-of-strtol)了解如何正确使用'strtol()'。这不是微不足道的。这些信息是可用的;让所有的条件都正确是很困难的。 –

回答

1

如果我的电话号码是0我该如何解决这个问题?

通过不使用atoi()在第一位。改为使用strto*()函数系列的成员。

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 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 
}