C11 7.22.1.4p8:
、strtol、strtoll和函数返回转换strtoul后strtoull的值(如果有)。如果无法执行转换,则返回零。如果正确的值在可表示值的范围之外,LONG_MIN, LONG_MAX, LLONG_MIN, LLONG_MAX, ULONG_MAX, 或被ULLONG_MAX返回(根据返回类型和值的符号,如果有的话),宏的值ERANGE存储在errno.
试试下面的代码:
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char str1[] = "88CC6069E4EDF969773369F988CC969F";
errno = 0; // must reset errno first, otherwise it can retain an old value
unsigned long int hex_int = strtoul(str1, NULL, 16);
if (errno != 0) {
perror("strtoul failed:");
}
}
在我的机器上它会输出
strtoul failed: Numerical result out of range
你犯了两个错误:返回的值strtoul是一个unsignedlong;即使这样,您的值也是 128 位,比unsigned long任何常见平台上的值都大。
而且,不要限制str1- 它应该至少是 33 个字符的长度;或改用指向字符的指针:
char *str1 = "88CC6069E4EDF969773369F988CC969F";
并且,int main(void)。