【问题标题】:Too few arguments to function 'fgets'?函数“fgets”的参数太少?
【发布时间】:2017-08-29 23:00:27
【问题描述】:

从字面上看,现在才学习编程两个小时。我每天用一小时的时间使用 Sams Teach Yourself C,但我被困在第 2 课看似简单的练习上。

5。下面的程序是做什么的? (输入,编译,运行。)

/* ex02-05.c */
#include <stdio.h>
#include <string.h>
int main(void)
{
    char buffer[256];

    printf( "Enter your name and press <Enter>:\n");
    fgets( buffer );

    printf( "\nYour name has %d characters and spaces!",
                     strlen( buffer ));

    return 0;
}

所以书的背面说最终结果应该允许我输入和命名,并让它告诉我空格和字符的数量。但是,我收到一条错误消息,指出“第 9 行的函数 fgets 的参数太少”?

【问题讨论】:

  • fgets() 接受三个参数。期间。顺便说一句:首先查找它所期望的参数的 types
  • fgets 接受 3 个参数。第一个是应该存储检索到的信息的字符缓冲区,第二个是要读取的字符数,第三个是要从中读取它们的流。
  • 我的理论是原始代码可能使用了gets,后来改为使用fgets - 但参数没有固定。
  • @MatteoItalia 我的想法也是如此。这对本书的质量来说并不好。 (OP:你用的是什么版本的书?)
  • 这似乎是那本书的勘误表。它确实提到了这个问题:onjofilms.blogspot.com/2014/09/…

标签: c


【解决方案1】:

这是书中的一个错误。正如编译器所说,fgets() 需要三个参数。

这可能是过度搜索和替换的结果,将fgets() 替换为已弃用的gets()。这里的意图可能是:

gets(buffer);

这将对大多数现代编译器产生警告,或者

fgets(buffer, sizeof(buffer), stdin);

将正确的参数传递给fgets()

这个错误令人不安,因为它表明本书的其他部分可能是不小心编写或更新的。小心行事。

【讨论】:

    猜你喜欢
    • 2017-08-18
    • 2021-01-17
    • 1970-01-01
    • 2010-12-16
    • 2017-04-01
    • 2018-04-22
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多