【问题标题】:c fgets not waiting for inputc fgets 不等待输入
【发布时间】:2012-07-10 03:06:16
【问题描述】:

我的代码中有 2 个 fget,它们都不等待输入...
这是第一个fgets的例子...

printf("Insert path: ");
if(fgets(dirpath, BUFFGETS, stdin) == NULL){
    perror("fgets dir path");
    close(sockd);
}

而且,正如我之前所写,下一个 fgets 也不在等待我的输入 :(
在第一个 fgets 之前,我有 2 个 scanf("%ms", &string);(如果这可能是麻烦的话)。

【问题讨论】:

  • 有什么理由不能再使用scanf
  • 'm' 在那个scanf() 中做什么?向我们展示真实代码(包括scanf() 调用)。
  • 另外,查看stackoverflow.com/a/6083941/12711 - 它可能与您的问题有关。请记住,scanf() 中的“%s”格式将在第一个空格处停止读取,将空格留在流中。换行符是一个空白字符。
  • @Arkadiy:你有m标志字符的文档链接吗?我看到了 GCC C lib 文档中讨论的 a 标志(对我来说是新的),但不是 m 标志。您链接到的 SO 问题只是说如果使用足够新的 glibc,您应该使用 m 而不是 a,但没有解释为什么或有什么不同。

标签: c fgets


【解决方案1】:

我认为 scanf 不会在换行符中读取。您可以尝试先在 scanf() 之后使用额外的 fget 来读取它。

【讨论】:

  • @Arkadiy:不要将"%s"scanf 一起使用;它容易发生缓冲区溢出。它没有指定最大输入长度,所以任意输入都会溢出任何可能的缓冲区。
  • 重要的部分是\n。 %s 实际上应该是 %ms ,就像在原始代码中一样。很抱歉造成混乱。
猜你喜欢
  • 1970-01-01
  • 2017-03-13
  • 2016-05-06
  • 1970-01-01
  • 2018-04-01
  • 2017-07-07
  • 2022-11-10
  • 2021-08-11
相关资源
最近更新 更多