【问题标题】:What is the difference between gets() and getc()?get() 和 getc() 有什么区别?
【发布时间】:2015-01-04 10:22:36
【问题描述】:

我尝试在char ch[20] 中输入一个字符串,当我按下空格键时它会停止输入变量。但是只要我不按回车键,gets() 函数就会接受输入。只要不按空格字符,如何输入?

【问题讨论】:

  • 欢迎来到 SO。您的问题标题与您提出的问题不同。另外,请尝试更加注意问题的文本呈现,有编辑按钮可以帮助您更好地格式化。
  • 另外,您不应该使用gets,它已从 C 标准中删除,因为它本质上是不安全的。请改用fgets

标签: c string.h


【解决方案1】:

gets() 不再是一个标准,它可能会导致缓冲区溢出,所以你应该使用fgets() 以便读取到行尾。为了逐个字符地读取字符直到遇到空格,您可以使用getc(),如下所示。

检查以下代码:

#include <stdio.h>

int main(void) {
    int i=0;
    char ch;
    char a[20];
    while(((ch = getc(stdin)) != ' ') && i<19)
    a[i++] = ch;
    a[i] = '\0';
    printf("%s\n",a);
    return 0;
}

【讨论】:

  • i 在执行到a[i] = '\0'; 时可以为20,从而导致未定义的行为
猜你喜欢
  • 2021-05-10
  • 2014-12-23
  • 1970-01-01
  • 1970-01-01
  • 2010-09-10
  • 1970-01-01
  • 2013-08-31
  • 2011-02-01
  • 2015-08-03
相关资源
最近更新 更多