【问题标题】:Why C standards contain many unsafe functions, which are useless?为什么 C 标准包含许多不安全的函数,这些函数是无用的?
【发布时间】:2012-12-23 16:47:01
【问题描述】:

为什么 C 标准包含许多不安全的函数,这些函数是无用的(在好的程序中它们不使用)和有害的,例如 getchar?为什么 C 标准不包含有用的函数,例如 getchgetche?这只是众多例子之一......

UPD 我很困惑:gets 而不是getchar

【问题讨论】:

  • getchar() 有什么问题?
  • 由于输入/输出缓冲区与C无关,因此每个操作系统都实现了它的方式。
  • 听起来像是另一个人在抱怨他的好手不完美。 C 可以说是有史以来最成功的语言。
  • @Bush 请详细说明getchar() 是如何不安全的
  • @R.. 对我来说,这几乎算不上“不安全” :)

标签: c c99 c89 c11


【解决方案1】:

你的意思是gets?为了不破坏旧程序。淘汰之路很漫长。 此外,它已经被弃用了。

【讨论】:

  • 但是为什么不添加getchgetche呢?他们阻碍了谁?为什么要为自己拉一条酸痛的尾巴?为什么不剪掉呢?
  • @Bush:不添加它们有很多很好的理由。一是许多历史系统具有相同名称的功能,它们做的事情完全不同;试图将其中之一标准化对其他人来说是不可接受的。另一个原因是这些函数在与 stdio 完全不同的级别上运行。例如,cursesgetch 函数使用 curses 键码,而不是字符,并且与 stdio 缓冲不兼容。
  • >你的意思是得到? @Carl Norum 是的,很抱歉,我与 gets 混淆了。
【解决方案2】:

gets 在 C99 中已弃用,并已在 C11 中删除

C11(ISO/IEC 9899:201x) 转发/6

去掉了gets函数()

【讨论】:

  • 谢谢,很有意思。
【解决方案3】:

您不能在电传打字机(看起来像打字机的终端)上实现 getch() [无缓冲读取]。或任何类型的终端,其中数据存储在终端中,直到您按下回车键。

有些函数可以做这类事情,但请记住,C 是一种应该“在任何东西上运行”的语言。

gets 多年前是标准库的一部分,所以它必须保留 - 否则,旧代码将无法编译,并且很多人喜欢使用旧代码(因为要修复它需要做很多工作多达 1000000 行以前可以工作的杂乱代码!)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-02
    • 1970-01-01
    • 2023-04-05
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多