如何解决用于检查任何数据类型的最大值是否超出的API
| 是否有API检查是否有任何数字超出其范围? 我的号码存储为字符串。char *ptr = \"123456789\"
API应该执行以下操作:如果a ==-1假定值超出,则为1。
请注意:我们无法解析该字符串并进行检查,因为它将自动将其包装到另一侧,并使其在范围内。
提前致谢
解决方法
请签出strtol和strtoul。
请参阅以下示例:
#include <stdlib.h>
#include <errno.h>
#include <limits.h>
int main (int argc,char const* argv[])
{
char a[] = \"123\";
char c[] = \"123134123412341234\";
long b,d;
errno = 0;
b = strtol(a,NULL,10);
if((b == LONG_MAX || b == LONG_MIN) && errno == ERANGE ){
printf(\"%s Out of range\\n\",a);
}
errno = 0;
d = strtol(c,10);
if((d == LONG_MAX || d == LONG_MIN) && errno == ERANGE ){
printf(\"%s Out of range\\n\",c);
}
return 0;
}
编辑:
将b
和d
的int
更改为long
。
在调用c库之前,将errno
设置为0
。
还要检查ѭ9errors是否有错误。
更改了检查顺序(根据下面的评论)
,好了,您仍然可以检查。只需建立数字并检查数字是否确实变大或变小即可。
int i = 0; // pos indicator
int r = 0; // result
int c = 0; // check
while(ptr[i])
{
c = r;
r = r * 10 + (ptr[i++] - \'0\');
if(r < c)
print(\"overflow happened!\\n\");
}
编辑:请注意,这将不适用于无符号数据类型,因为它很容易溢出到足以通过检查的程度。
,只需使用strol()或strtoll()并检查errno。对于较小的数据类型,您需要创建一个非常简单的函数,该函数可以与limits.h中的USHRT_MAX,UINT_MAX等进行比较。
有关更多信息,请参见man strol和manlimits.h。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。