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 返回值的主要内容,如果未能解决你的问题,请参考以下文章