错误:'functiono'的冲突类型

时间:2018-03-11 17:29:18

标签: c

我知道当函数的声明和定义不兼容时会发生此错误。我在这段代码中可以看到,函数(int getline)声明和定义的类型和参数是相同的。

#include <stdio.h>
#define MAXLINE 1000

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

int 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\n", 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;
    }
}

我知道我错过了一些小事。

2 个答案:

答案 0 :(得分:1)

在POSIX系统中,如linux和macos getline是标准和你的标准的一部分 getline与之发生冲突。

将您的功能重命名为mygetline。我复制了你的代码并重命名了这个函数, 它编译没有问题。

答案 1 :(得分:-1)

以下提议的代码:

  1. 干净地编译
  2. 对OP发布的代码进行最小更改
  3. 但是,变量'max'永远不会初始化为任何已知值,因此它包含堆栈中其位置的垃圾。结果是1)代码不会始终工作,2)它包含未定义的行为。所以代码逻辑需要纠正

    此外,当传入行超过1000个字节时,发布的代码无法处理条件。

    现在,建议的代码

    #include <stdio.h>
    #define MAXLINE 1000
    
    int my_getline(char line[], int maxline);
    void copy(char to[], char from[]);
    
    int main() {
        int len;
        int max;
        char line[MAXLINE];
        char longest[MAXLINE];
    
        max = 0;
        while((len = my_getline(line, MAXLINE)) > 0) {
            if (len > max) {
                max = len;
                copy(longest, line);
            }
        }
        if (max > 0) {
            printf("%s\n", longest);
        }
        return 0;
    }
    
    int my_getline(char s[], int lim)
    {
        int c, i;
    
        for (i=0; i<lim-1 && (c=getchar())!=EOF && c!='\n'; ++i)
            s[i] = (char)c;
        if (c == '\n') {
            s[i] = (char)c;
            ++i;
        }
        s[i] = '\0';
        return i;
    }
    
    
    void copy(char to[], char from[]) {
        int i;
    
        i = 0;
        while((to[i] = from[i]) != '\0'){
            ++i;
        }
    }