1

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

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

4

1 回答 1

2

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

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

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

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

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

于 2012-10-18T14:20:47.597 回答