【问题标题】:Difference between atoi and atol in windowswindows中atoi和atol的区别
【发布时间】:2012-10-09 00:32:47
【问题描述】:

我们向其提供源代码的一位客户说,通过将 int 更改为 long 并将 atoi 更改为 atol,他们会得到我们程序的不同结果。但据我了解,Windows 上的 int 和 long 具有相同的 4 字节大小和相同的最小值/最大值。以同样的类比,我希望 atoi 和 atol 产生相同的输出,并且通过我们的测试,它们确实如此。

那些我不知道的命令有什么区别吗?

【问题讨论】:

  • sizeof(int)sizeof(long) 给出相同的结果吗?
  • 为了“得到不同的结果”做了什么计算?
  • 这是在某个不寻常的平台上吗?也许是嵌入式设备?
  • @默认是的,他们在 Windows 中这样做
  • @Telgin,我对此感到困惑,但它是 Windows 7。

标签: c++ visual-c++


【解决方案1】:

在非错误情况下,这两个函数都定义为等价于

strtol(nptr, (char **)NULL, 10)

唯一的区别是atoi 将返回值转换为int

在错误情况下(当字符串表示超出类型范围的值时)可能会有不同的行为,因为两者的行为都是未定义的。但我会感到惊讶。即使atoiatol 不是通过调用strtol 实现的,它们也可能是由相同或非常相似的代码实现的。

我个人会要求客户向我显示确切的代码。也许他们并没有像他们声称的那样替换 int -> longatoi -> atol。如果这就是他们所做的全部更改(但他们所做的与您进行测试时的假设略有不同),那么他们可能已经在您的代码中发现了错误的症状。

【讨论】:

    猜你喜欢
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 2012-08-10
    • 2020-12-01
    相关资源
    最近更新 更多