我对atoi有疑问。我正在尝试使用atoi来检查我是否可以将一个字符转换为一个数字,但是,如果我的数字是0,我该如何绕过它?我知道atoi如果失败则返回0,但如果它起作用,则返回数字的值,在这种情况下,0将属于这两个类别。
如果我改为使用strtol,有没有办法检查数组中的字符是否为> = 0,或者根本不存在。
例如,如果我的动态数组由{1 40 500}组成,并且我尝试strtol在位置8(刚出界),我希望它返回NULL或某些指示atoi / strtol失败
答案 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
}