为什么函数 `strtoll` 给出了错误的值并将 errno 设置为 34?
Why does function `strtoll` gives a wrong value and set errno to 34?
这是我的 C 代码:
char *ptr = "0xfff1342809062Cac";
char *pEnd;
long long value = strtoll(ptr, &pEnd, 0);
printf("%lld\n", value);
printf("errno: %d\n", errno);
我是用gcc-8.3.0编译的,输出结果是:
9223372036854775807
errno: 34
我很困惑,strtoll 给出了一个意外的值并将 errno 设置为 34。
这种行为是正确的。在您的系统上,long long
的最大值,即 LLONG_MAX
是 9223372036854775807
。
您的字符串中的值大于此值;如果值超出范围且太大,则指定的行为是:return LLONG_MAX
并且 errno
设置为 ERANGE
(在您的系统上大概是 34)。
或许考虑使用 strtoull
和 unsigned long long
return 值,因为该字符串适合该数据类型。
这是我的 C 代码:
char *ptr = "0xfff1342809062Cac";
char *pEnd;
long long value = strtoll(ptr, &pEnd, 0);
printf("%lld\n", value);
printf("errno: %d\n", errno);
我是用gcc-8.3.0编译的,输出结果是:
9223372036854775807
errno: 34
我很困惑,strtoll 给出了一个意外的值并将 errno 设置为 34。
这种行为是正确的。在您的系统上,long long
的最大值,即 LLONG_MAX
是 9223372036854775807
。
您的字符串中的值大于此值;如果值超出范围且太大,则指定的行为是:return LLONG_MAX
并且 errno
设置为 ERANGE
(在您的系统上大概是 34)。
或许考虑使用 strtoull
和 unsigned long long
return 值,因为该字符串适合该数据类型。