[英]Why do I get a “conflicting types for getline” error when compiling the longest line example in chapter 1 of K&R2?
[英]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] = '\0';
return i;
}
void copy(char to[], char from[]) {
int i;
i = 0;
while ((to[i] = from[i]) != '\0') {
++i;
}
}
簡單的答案:不要調用你的函數getline
。 這個名字被取了。
(我知道,這是 K&R 中的一個例子。所以你應該能夠使用它,對嗎?不幸的是,不。我也煩。)
稍微長一點的答案:現在有一個半標准的getline
函數,你的函數與之沖突。 如果您嘗試命名您自己的函數之一printf
,您會遇到相同類型的錯誤。 可能有一種說法,“我不想使用標准的getline
函數,我想使用我自己的”,但在這種情況下,它可能不值得。
(就個人而言:我已經用 C 編程了大約 35 年,其中大約 34.9 年我一直在使用自己的getline
函數,自從我在 K&R 中讀到它。但在過去的一年或所以我不得不重寫我所有的程序,調用我自己的函數fgetline
而不是getline
來解決這個問題。)
有相同的 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) { .. }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.