C,错误:getline的冲突类型

时间:2016-05-09 16:49:58

标签: c kernighan-and-ritchie

有人可以看看这个并告诉我出了什么问题。我有3个错误。 1)error: Conflicting types for getline 2)error: too few arguments to function call, expected 3 have 2 3)error: conflicting types for getline。我确定我忽略了一些简单但我无法找到错误的东西。谢谢,这是代码......

#include <stdio.h>

#define MAXLINE 1000

int getline(char line[], int maxline); /*conflicting types for getline*/
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)/*too few arguments to call, expected 3 have 2*/
    if (len > max){
        max = len;          
        copy(longest, line);
    }   


if (max > 0)
    //printf("longest line = %d characters\n -->", max);
    printf("%s", longest);


return 0;
}


int getline(char s[], int lim){/*conflicting types for getline*/

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 :(得分:5)

答案很简单:不要调用你的函数getline。这个名字已被采用。

(我知道,这是K&amp; R的一个例子。所以你应该能够使用它,对吧?不幸的是,不。也是我的错误。)

稍微长一点的回答:现在有一个半标准getline功能,与你发生冲突。如果您将名称与自己的某个函数printf联系起来,则会遇到同样的错误。可能有一种方式可以说,“我不想使用标准getline函数,我想使用自己的函数”,但在这种情况下,它可能不值得。

(就个人而言:我已经用C语言编程了大约35年,从那时起我使用自己的getline函数的大约34.9年,自从我在K&amp; amp中读到它以来; R.但是在过去一年左右的时间里,我不得不重写我的所有程序,调用我自己的函数fgetline而不是getline来解决这个问题。)

答案 1 :(得分:3)

GNU函数getline具有相同的功能,它不属于C标准。 据推测,您正在编译时没有指定-std(特定的C标准),这会使<stdio.h>公开此函数的GNU声明。

您可以使用-std=c99-std=c11进行编译,如:

gcc -Wall -Wextra -std=c11 gl.c

或将您的功能重命名为my_getline()以避免此冲突。

此外,main()的签名需要是标准签名之一。因为,您不使用命令行参数,您可以使用:

int main(void) { .. }

请参阅:What should main() return in C and C++?