Why do I get this error: Conflicting types for getline
Why do I get this error: Conflicting types for getline
谁能看看这个并告诉我哪里出了问题。我有 3 个错误:
error: Conflicting types for getline
error: too few arguments to function call, expected 3 have 2
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] = '[=10=]';
return i;
}
void copy(char to[], char from[]) {
int i;
i = 0;
while ((to[i] = from[i]) != '[=10=]') {
++i;
}
}
有 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++?
简单的答案:不要调用您的函数 getline
。该名称已被占用。
(我知道,这是 K&R 中的一个例子。所以你应该可以使用它,对吧?不幸的是,不能。我也很烦。)
稍长的答案:现在有一个半标准的 getline
函数,您的函数与之冲突。如果您尝试命名您自己的函数之一 printf
,您将遇到与您遇到的相同类型的错误。可能有一种说法,“我不想使用标准 getline
函数,我想使用我自己的”,但在这种情况下,它可能不值得。
(就我个人而言:我用 C 编程已经有大约 35 年了,其中大约 34.9 年我一直在使用我自己的 getline
函数,自从我读到它以来在 K&R。但在过去一年左右的时间里,我不得不重写我所有的程序,调用我自己的函数 fgetline
而不是 getline
,来解决这个问题。)
谁能看看这个并告诉我哪里出了问题。我有 3 个错误:
error: Conflicting types for getline
error: too few arguments to function call, expected 3 have 2
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] = '[=10=]';
return i;
}
void copy(char to[], char from[]) {
int i;
i = 0;
while ((to[i] = from[i]) != '[=10=]') {
++i;
}
}
有 GNU 函数 getline 与之相同,它不是 C 标准的一部分。
据推测,您正在编译时没有指定 -std
(特定的 C 标准),这使得从 <stdio.h>
.
您可以使用 -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++?
简单的答案:不要调用您的函数 getline
。该名称已被占用。
(我知道,这是 K&R 中的一个例子。所以你应该可以使用它,对吧?不幸的是,不能。我也很烦。)
稍长的答案:现在有一个半标准的 getline
函数,您的函数与之冲突。如果您尝试命名您自己的函数之一 printf
,您将遇到与您遇到的相同类型的错误。可能有一种说法,“我不想使用标准 getline
函数,我想使用我自己的”,但在这种情况下,它可能不值得。
(就我个人而言:我用 C 编程已经有大约 35 年了,其中大约 34.9 年我一直在使用我自己的 getline
函数,自从我读到它以来在 K&R。但在过去一年左右的时间里,我不得不重写我所有的程序,调用我自己的函数 fgetline
而不是 getline
,来解决这个问题。)