我有一个关于atoi的问题。我正在尝试使用atoi来检查是否可以将字符转换为数字,但是,如果我的数字为0,我该如何解决这个问题?我知道atoi如果失败返回0,但是如果它工作,它也返回数字的值,在这种情况下,0将归入这两个类别。Atoi返回值
如果我要使用strtol代替,有没有办法检查数组中的字符是否大于等于0,或者根本不存在/不存在。例如,如果我的动态数组由{1 40 500}组成,并且我尝试在位置8(刚好超出边界)进行测试,我希望它返回NULL或者表明atoi/strtol失败
我有一个关于atoi的问题。我正在尝试使用atoi来检查是否可以将字符转换为数字,但是,如果我的数字为0,我该如何解决这个问题?我知道atoi如果失败返回0,但是如果它工作,它也返回数字的值,在这种情况下,0将归入这两个类别。Atoi返回值
如果我要使用strtol代替,有没有办法检查数组中的字符是否大于等于0,或者根本不存在/不存在。例如,如果我的动态数组由{1 40 500}组成,并且我尝试在位置8(刚好超出边界)进行测试,我希望它返回NULL或者表明atoi/strtol失败
如果我的电话号码是0我该如何解决这个问题?
通过不使用atoi()
在第一位。改为使用strto*()
函数系列的成员。
你也可以使用sscanf
读出整数,这样,只是检查的sscanf的返回值,看它是否找到了一个整数或不
char a[] = "12";
char b[] = "abc";
int n = 0;
assert(sscanf(a, "%d", &n) == 1);
assert(sscanf(b, "%d", &n) == 0);
通过
动态数组组成{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
}
有了'strtol',你可以使用'endptr'到确定转换是否成功。 – user3386109
你的意思是“1 40 500”吗? –
请参阅[正确使用'strtol()']的方法(https://stackoverflow.com/questions/14176123/correct-usage-of-strtol)了解如何正确使用'strtol()'。这不是微不足道的。这些信息是可用的;让所有的条件都正确是很困难的。 –