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