gpt4 book ai didi

c - 为什么 itoa 被宣布为不安全?

转载 作者:行者123 更新时间:2023-11-30 20:08:15 26 4
gpt4 key购买 nike

这是为什么

char* itoa(int value, char* str, int base);

而不是

char (*itoa(int value, char (*str)[sizeof(int) * CHAR_BIT + 1], int base))[sizeof(int) * CHAR_BIT + 1]

这可以保护程序员免受缓冲区溢出的影响?

最佳答案

itoa 不是标准的,因此任何库都可以随意声明它。首先询问关于未标准化的功能的基本原理并没有多大意义。

那些被标准化的函数大多是偶然进入标准的。他们基本上采用了 Unix 中可用的所有功能,将其名称写在纸上,然后将它们扔进帽子里,然后异想天开地画了一百个左右。所以我们得到了一堆不同质量和用途的不同功能。我想说其中大多数要么不安全,要么风格不好。不存在任何理由。

<小时/>

具体情况:

不使用固定数组指针的原因显然是 C 中的大多数库函数(无论是否标准)都适用于具有可变长度的以 null 结尾的字符串。如果某个函数的行为有所不同,它就会脱颖而出。当 C 推出时,Unix 显然正在尝试从固定长度字符串转向以 null 结尾的字符串。

此外,关于指针转换的规则最初几乎不存在,因此在 20 世纪 70 年代,当所有这些函数都成熟时,使用数组指针可能不会增加任何安全性。甚至没有 void 指针类型。

关于缓冲区溢出和其他错误控制:在编写 C 语言时,您可以将错误控制放在函数中或调用者中。 C 中最常见的做法是将错误处理留给调用者,只要有记录就完全没问题。这其中有一个道理,就是“C精神”,就是永远把性能放在第一位。错误处理会降低性能。在许多用例中,调用者提前知道数据的性质,使得此类错误控制变得多余。

关于c - 为什么 itoa 被宣布为不安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57657859/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com