微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用于检查任何数据类型的最大值是否超出的API

如何解决用于检查任何数据类型的最大值是否超出的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 举报,一经查实,本站将立刻删除。