Atoi 返回值

Posted

技术标签:

【中文标题】Atoi 返回值【英文标题】:Atoi return value 【发布时间】:2016-03-01 05:28:46 【问题描述】:

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

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

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

【问题讨论】:

使用strtol,可以使用endptr判断转换是否成功。 你的意思是“1 40 500”吗? 请参阅Correct way to use strtol(),了解如何正确使用strtol()。这不是微不足道的。信息可用;让所有条件都正确是很棘手的。 atoi()strtol() 用于将 char 数组转换为整数类型。 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

由 1 40 500 组成的动态数组

您的意思是 C 字符串“1 40 500”吗?如果是这种情况,那么在 null 终止处(位置 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

【讨论】:

以上是关于Atoi 返回值的主要内容,如果未能解决你的问题,请参考以下文章

C++ atoi 返回不正确的值

C语言atoi()函数(字符串转整数int类型)

atoi():str转int

save方法返回值为联合主键的id时候怎么转换为string类型

字符串中的非整数数字并使用 atoi

atoi函数的用法