【问题标题】:What is the difference between gets() and getch()?get() 和 getch() 有什么区别?
【发布时间】:2014-02-19 20:34:49
【问题描述】:

我听说过这两种功能,但我从未真正了解它们的区别。是gets() 无需按回车即可获取字符串,getch() 无需按回车即可仅获取一个字符?

谢谢

【问题讨论】:

  • 另外,搜索和比较文档应该很容易。
  • 您熟悉手册页吗?
  • 一个得到一个's',另一个得到一个'ch'。

标签: c++ gets getch


【解决方案1】:

getch() 是 Windows 和 DOS 系统上 conio.h 中的一个函数,它在 C 中未标准化。它用于仅(确切地)获取单个字符。它也存在于 *nix 系统上的 curses.h 中(根据 cmets 中的 Mike 所说)。

gets() 是 C 中的标准函数,在新的 C11 标准中被删除。您可以使用它来输入字符串,但您应该永远不要使用它。您不能使用它来安全地输入字符串,因为只要您键入它就会写入内存。所以你可以很容易地得到缓冲区溢出。

【讨论】:

  • 正确,关于gets()。相反,您应该使用 fgets() 并将最大长度指定为第二个参数,并将 stdin 指定为第三个参数,作为 gets() 的干净且安全的替代品。
  • getch 不是 Window 的唯一功能。它可以在curses.h for *ix 中使用
【解决方案2】:

我从来没有真正理解他们的区别

这些方法具有明显不同的签名(很明显类似于语义,恕我直言):

 char *gets( char *str );

 int getch(void);

请注意,getch() 是特定于平台的表示法,等效标准定义的 getc() 函数需要 FILE* 参数。

【讨论】:

    【解决方案3】:

    getch 是平台或编译器特定的函数。

    gets 函数用于从标准(控制台)输入返回零个或多个字符。

    编辑 1:
    根据您的编译器实现,getch 函数可用于在不等待用户的情况下获取字符,或在不回显到控制台的情况下获取字符。

    一个函数获取单个字符,另一个获取多个字符。

    【讨论】:

      【解决方案4】:

      gets() 已在 C11 中删除,并在 C++11 中标记为已弃用。

      我没听说过getch()。你的意思是getchar()

      无论如何,您应该能够自己查找文档。这两个函数是cstdio的一部分

      【讨论】:

      • IIRC,getch 来自 conio (DOS)。
      猜你喜欢
      • 2012-02-29
      • 1970-01-01
      • 2021-05-10
      • 2014-12-23
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      相关资源
      最近更新 更多