c - 我可以使用什么替代方法来代替 gets() 和 puts()?

标签 c gcc gcc-warning gets

gets() 的代码片段

int main(int argc, char *argv[])
{
    char str[MAX_SIZE]
    gets(str);
    printf("\n");

puts() 的代码片段

  printf("The most probable key is: %d\n", max2);
  puts(output);
  return 0;

我没有粘贴我的全部代码,因为它似乎与我的问题无关。我只想知道解决此问题的方法,因为当我通过 GCC 运行我的代码时,它会给我错误并且不允许我使用 gets()。我该如何解决这个问题?

最佳答案

改用fgetsfputs。除了消除 gets 的所有缺陷外,getsfgets 的用法还有一个主要区别:fgets 在缓冲区中存储换行符(而 gets 没有)。

因此,等效项 - 即如果不需要则删除任何新行 - 可能如下所示。函数调用 strcspn(buffer,"\n") 给出最长的字符序列,直到遇到新行(或 strlen(buffer),如果字符串不包含新行)。通过将 0 写入此位置的索引,将删除一个新行(如果有的话)。

char buffer[MAX_SIZE] = "";
if (fgets(buffer, MAX_SIZE ,stdin)) {
  buffer[strcspn(buffer,"\n")] = '\0';
}

关于c - 我可以使用什么替代方法来代替 gets() 和 puts()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54455908/

相关文章:

c - 一个一个从子进程中读取数据

c - 如何在linux中引发因EINTR而失败的semop调用?

c - gcc 的优化器在这里做了一些奇怪的事情吗?

c++ - -Woverloaded-const 函数的虚拟警告

编译 amqsput0.c [MQ]

c - C 中的按位操作

c - 带空格的字符串输入

c - "int a=({10;});"这个表达式用C语言怎么解释?

linux - 禁用 GCC 优化后不会发生 __kernel_vsyscall() 崩溃

关于潜在未初始化变量的编译器警告