1

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

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

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

4

3 回答 3

2

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

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

assert(sscanf(a, "%d", &n ) == 1);
assert(sscanf(b, "%d", &n ) == 0);
于 2016-03-01T07:28:59.470 回答
1

如果我的号码是 0,我该如何解决?

不使用atoi()第一名。strto*()请改用函数族的成员。

于 2016-03-01T07:08:14.780 回答
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
}
于 2016-12-14T18:18:42.967 回答