有人可以看看这个并告诉我出了什么问题。我有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;
}
}
答案 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) { .. }