我们向其提供源代码的一位客户说,通过将 int 更改为 long 并将 atoi 更改为 atol,他们会得到我们程序的不同结果。但据我了解,Windows 上的 int 和 long 具有相同的 4 字节大小和相同的最小/最大值。以同样的类比,我希望 atoi 和 atol 产生相同的输出,并且通过我们的测试,它们确实如此。
我不知道的那些命令有什么区别吗?
我们向其提供源代码的一位客户说,通过将 int 更改为 long 并将 atoi 更改为 atol,他们会得到我们程序的不同结果。但据我了解,Windows 上的 int 和 long 具有相同的 4 字节大小和相同的最小/最大值。以同样的类比,我希望 atoi 和 atol 产生相同的输出,并且通过我们的测试,它们确实如此。
我不知道的那些命令有什么区别吗?
在非错误情况下,函数都定义为等价于
strtol(nptr, (char **)NULL, 10)
唯一的区别是atoi
将返回值转换为int
.
在错误情况下(当字符串表示超出类型范围的值时)可能会有不同的行为,因为两者的行为都是未定义的。但我会感到惊讶。即使atoi
和atol
不是通过调用实现的strtol
,它们也可能是由相同的代码或非常相似的代码实现的。
我个人会要求客户向我展示确切的代码。也许他们不只是替换int
->long
和atoi
->atol
他们声称。如果这就是他们所做的全部更改(但他们所做的与您进行测试时的假设略有不同),那么他们可能已经在您的代码中发现了错误的症状。