2017-09-26 9 views
0
#include <stdio.h> 

#define MAXLINE 1000 

int max; 
char line[MAXLINE]; 
char longest[MAXLINE]; 

int getline(void); 
void copy(void); 

int main(){ 
    int len; 
    extern int max; 
    extern char longest[]; 

    max = 0; 
    while((len = getline()) > 0){ 
    if(len > max){ 
     max = len; 
     copy(); 
    } 
    } 
    if(max > 0) 
    printf("%s", longest); 
    return 0; 
} 

int getline(void){ 
    int c, i; 
    extern char line[]; 

    for(i = 0; i < MAXLINE - 1 && (c = getchar()) != EOF && c!= '\n'; i++) 
    line[i] = c; 
    if(c == '\n'){ 
    line[i] = c; 
    i++; 
    } 
    line[i] = '\0'; 
    return i; 
} 

void copy(void){ 
    int i; 
    extern char line[], longest[]; 

    i = 0; 
    while((longest[i] = line[i]) != '\0') 
    i++; 
} 

に表示されますエラーは、次のとおりです。は少なすぎる引数が呼び出しを機能するために取得し、競合タイプC

longlineextern.c:9:5: error: conflicting types for 'getline' 
int getline(void); 
    ^
/usr/include/stdio.h:448:9: note: previous declaration is here 
ssize_t getline(char ** __restrict __linep, size_t * __restrict __lineca... 
     ^
longlineextern.c:18:24: error: too few arguments to function call, expected 3, 
     have 0 
    while((len = getline()) > 0){ 
       ~~~~~~~^
/usr/include/stdio.h:448:1: note: 'getline' declared here 
ssize_t getline(char ** __restrict __linep, size_t * __restrict __lineca... 
^ 
longlineextern.c:29:5: error: conflicting types for 'getline' 
int getline(void){ 
    ^
/usr/include/stdio.h:448:9: note: previous declaration is here 
ssize_t getline(char ** __restrict __linep, size_t * __restrict __lineca... 
     ^
3 errors generated. 

これは、他のプログラムに起こっていると私は私が正しいに渡しています理由として見ることができません引数の量とそれらは正しいタイプです。

このプログラムは、Cプログラミング言語の本から正確にコピーされているため、正しいはずです。

は、それはすべてのヘルプは大幅にすでにstdio.hで定義されたgetline機能があるので、あなたはこのエラーを取得する おかげ

+0

'getline'が使用しているライブラリに既に存在するため、名前の競合が発生しています。 'my_getline'などの別の名前を使用してください。 – BLUEPIXY

+0

MSVCの' stdio.h'には 'getline'がありません。それはきれいにコンパイルされます。 –

答えて

0

を高く評価しているMacの端子

でのgccを使用してコンパイルされました。同じ名前の関数が異なる引数の型を定義する

overloadingとして知られているが、これはC.

では許可されていないあなたは、このようなmy_getlineとして、名前の競合を避けるために、関数に何かを呼び出す必要があります。

関連する問題