gpt4 book ai didi

c - strtol 和 strtoul 有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 17:22:58 29 4
gpt4 key购买 nike

我在 c 中遇到了 strtol 的一些异常结果

这是示例程序。

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
printf("%x\n", strtol("0xfffff70A", NULL, 0));
return 0;
}

这个简单程序的输出是

0x7fffffff

而不是 0xfffff70A。如果我使用 strtoul,结果就是 0xfffff70a。我正在使用 32 位机器,我想知道会发生什么。附言。我正在使用 gcc 4.7.2

最佳答案

来自 7.22.1.4 第 8 段(the N1570 draft of the 2011 edition of the standard 的):

If the correct value is outside the range of representable values, LONG_MIN, LONG_MAX, LLONG_MIN, LLONG_MAX, ULONG_MAX, or ULLONG_MAX is returned (according to the return type and sign of the value, if any), and the value of the macro ERANGE is stored in errno.

由于输入字符串的正确值对于类型而言太大,您得到 LONG_MAX,并且 errno 设置为 ERANGE

每当 strto(u)l(l) 函数之一返回 TYPE_MAXTYPE_MIN 值之一时,您需要检查errno 以确定结果是否正确,或者您的输入是否超出范围。

关于c - strtol 和 strtoul 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16711445/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com