一尘不染

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

linux

这是我正在尝试直接从“ 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等时,出现类似的错误。当我无法运行程序以查看其输出时,真的很难学习。在一个程序中引入字符数组和函数调用时,开始出现此问题。我很乐意就此问题提出任何建议。


阅读 187

收藏
2020-06-03

共1个答案

一尘不染

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

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

2020-06-03