atoi是一个标准功能.但itoa不是.为什么?

Pav*_*ath 11 c standards posix function itoa

为什么这个区别?我已经itoa陷入了可怕的问题,假设进入stdlib.h并最终将自定义版本itoa与不同的原型相关联,从而产生一些疯狂的错误.

那么,为什么itoa不是一个标准功能呢?它出什么问题了?为什么标准偏向其孪生兄弟atoi

CB *_*ley 7

没有itoa标准化,所以要将它添加到标准,你需要一个令人信服的理由和一个良好的界面来添加它.

itoa我见过的大多数接口都使用了一个具有重入和生命周期问题的静态缓冲区,分配了一个动态缓冲区,调用者需要释放它,或者要求用户提供一个缓冲区,这使得接口不会更好sprintf.

  • 带有传入缓冲区的itoa()可以很大程度上胜过s(n)printf(),而不会使用该库的特定部分(printf()系列中没有任何内容).这不是将itoa()放在标准C库中的理由,但是它更倾向于选择更重的东西. (2认同)
  • 还可以避免与printf()系列一起运行的所有其他解析函数.记住 - 除了解析格式字符串之外,这辈子还有其他的东西.就像,内存足迹. (2认同)