当前位置: 首页 > 面试题库 >

编译K&R2第1章中最长的行示例时,为什么会出现“ getline的类型冲突”错误?

申光临
2023-03-14
问题内容

这是我正在尝试直接从“ C编程语言”的1.9节运行的程序。

#include <stdio.h>
#define MAXLINE 1000

int getline(char line[], int maxline);
void copy(char to[], char from[]);

main()
{
    int len;
    int max;
    char line[MAXLINE];
    char longest[MAXLINE];

    max = 0;
    while ((len = getline(line, MAXLINE)) > 0)
        if (len > max) {
        max = len;
        copy(longest, line);
        }
    if (max > 0)
        printf("%s", longest);
return 0;
}


int getline(char s[], int lim)
{
    int c, i;

    for (i=0; i<lim-1 && (c=getchar()) !=EOF && c != '\n'; ++i)
        s[i] = c;
    if (c == '\n') {
        s[i] = c;
        ++i;
    }
    s[i] = '\0';
    return i;
}


void copy(char to[], char from[])
{
    int i;

    i = 0;
    while ((to[i] = from[i]) != '\0')
        ++i;
}

这是我尝试使用Ubuntu 11.10编译程序时遇到的错误:

cc     word.c   -o word
word.c:4:5: error: conflicting types for ‘getline’
/usr/include/stdio.h:671:20: note: previous declaration of ‘getline’ was here
word.c:26:5: error: conflicting types for ‘getline’
/usr/include/stdio.h:671:20: note: previous declaration of ‘getline’ was here
make: *** [word] Error 1

只是为了确保书中的印刷没有问题,我在这本书的本章练习的后面引用了这套答案(http://users.powernet.co.uk/eton/kandr2/krx1。
html),当我尝试从该链接运行练习18、19、20、21等时,出现类似的错误。当我无法运行程序以查看其输出时,真的很难学习。在一个程序中引入字符数组和函数调用时,开始出现此问题。我很乐意就此问题提出任何建议。


问题答案:

问题在于这getline()是一个标准的库函数。(在中定义stdio.h)您的函数具有相同的名称,因此与之冲突。

解决方案是简单地更改名称。



 类似资料:
  • Application.Properties 应该删除pom.xml中的未知错误,而且我必须能够填充H2 dB中的值。

  • cmake的makefile网络与简单的编译和链接在最终可执行文件中有什么不同? 我试图使用子弹物理库(Bullet3-2.83.7)https://github.com/bulletphysics/bullet3. 我在MSYS2中编译了这个库,并且用明w-w64发出了一些警告。 之后,我可以毫无问题地运行示例程序,特别是示例浏览器和HelloWorld。 我已经一直试图将HelloWorld源

  • 问题内容: 我正在尝试使用Ant脚本和Java编译JasperReports模板。我收到此错误: 模板中没有什么复杂的东西,但是我仍然无法编译。 问题答案: 您必须将模板中的值设置为Java。有两种方法可以执行此操作: 如果使用的是 iReport,请 在 “报告检查器”中 选择根对象(与报告名称相同的根对象)。然后在“ 属性” 窗口中,从“ 语言” 下拉列表中选择“ Java ” 。 __ 如果

  • 问题内容: 我正在大学学习基础知识,并且希望对Eclipse中的以下错误有所帮助:“对于类型ShopCLI,未定义方法getCost()”& 这是我的代码 问题答案: 方法是在订单类中定义的,而不是在类中定义的。所以你的代码: 应该改为

  • 问题内容: 几天后,我匆忙将一个URL错误地粘贴到了Java程序中,我试图运行该特定程序,并且出于好奇,它成功运行了,没有任何警告,没有错误,也没有异常。类似的代码如下所示。我编译并成功运行。 在main()方法的第二行,它应该发出一些编译时错误,但它可以很好地工作并在控制台上显示相应的消息。为什么? 问题答案: 标记被解释为标签。而随后启动一个新的行注释。因此,发布的代码仍然是有效的Java(如

  • 问题内容: 鉴于: 我得到: 我还会收到关于第6行的“未经检查的演员表”警告。为什么?该是 不是 一个泛型类型- 它只是一个普通的。如何通过检查和强制转换为实例来正确实现? 注意:显然,此代码示例是我的实际代码的简化版本。真正的类和都大得多,是一个内部类的其实现中使用。 仅供参考:实数确实使用了通用参数。 问题答案: o不是通用类型-只是普通对象。 那不是问题。问题…和两个编译错误的根本原因…是泛