【问题标题】:Should I use fputs or putchar?我应该使用 fputs 还是 putchar?
【发布时间】:2017-07-18 08:44:17
【问题描述】:

这是我的以下程序。我不想换行,这就是为什么我使用fputs() 而不是puts()

char words[5][6] = {"One", "Two", "Three", "Four", "Five"};
for (i = 0; i <= 4; i++)
   fputs(words[i], stdout);

我想知道这行代码是否足够安全,可以用作该代码的替代品。

for (i = 0; i < 5; i++)
{
   for (j = 0; j < 6; j++)
   if (words[i][j] != NULL)
      putchar(words[i][j]);
   else
      continue;
}

注意:我知道第二个代码部分的循环需要做一些工作,尤其是在 if 语句上,但我想知道整体输出。我在问这个问题,因为在我的第一个问题上,我使用了 gets() 并被告知不要。所以我想避免使用不好的关键字。

【问题讨论】:

  • 它足够安全,而且比替代方案简单得多。

标签: c string loops multidimensional-array fputs


【解决方案1】:

我应该使用 fputs 还是 putchar?

我建议您将fputs 用于您的目的,因为它无需重新发明轮子即可实现您的目标。

您使用putchar 的第二种方法也可以,但为什么要重新发明轮子呢?但是,如果由于某些原因必须使用putchar,则需要将continue 替换为break,以在遇到标记字符串结尾的null character 时跳出内部循环。

【讨论】:

    【解决方案2】:

    gets 本质上是不安全的(并在 2011 年从 C 标准中删除),fputs 不是。我认为您使用 fputs 的代码没有任何问题。

    【讨论】:

      【解决方案3】:

      fputs 可以安全使用。 gets 如你所说,不好。

      【讨论】:

        【解决方案4】:

        putsfputs 在这种情况下都是安全的。您的替代方案只是fputs 的(错误)C 翻译。这是错误的,因为您在空字符后继续循环。如果出于任何原因,在第一个 null 之后存在垃圾(来自先前较长的字符串),您将使用它。

        无论如何,标准库中的函数可能已经过优化,因此您应该尽可能使用它们。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-09-05
          • 1970-01-01
          • 2015-10-16
          • 2023-03-06
          • 2013-02-20
          • 2011-07-31
          • 2010-12-23
          相关资源
          最近更新 更多