Windows中atoi和atol的区别

时间:2012-10-18 14:04:30

标签: c++ visual-c++

我们提供源代码的客户之一说,通过将int更改为long和atoi更改为atol,它们会得到不同的程序结果。但据我所知,Windows上的int和long具有相同的4字节大小和相同的最小/最大值。在同样的比喻中,我预计atoi和atol产生相同的输出,并且通过我们的测试,他们做到了。

我不知道的命令之间有什么区别吗?

1 个答案:

答案 0 :(得分:2)

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

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

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

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

我个人要求客户向我显示确切的代码。也许他们不只是替换int - > longatoi - >他们声称atol。如果这一切都改变了(但是他们的确与您测试时的假设略有不同),可能他们已经在您的代码中发现了错误的症状。