2017-09-26 71 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編程語言手冊中複製,所以它應該是正確的。

它在Mac的終端

使用gcc編譯任何幫助是極大的讚賞 感謝

+0

由於'getline'已經存在於您正在使用的庫中,所以名稱衝突正在發生。使用不同的名稱,如'my_getline'等。 – BLUEPIXY

+0

MSVC的'stdio.h'中沒有'getline',它編譯乾淨。 –

回答

0

因爲已經有在stdio.h定義的函數getline你得到這個錯誤。

定義的函數具有相同的名稱但不同的參數類型被稱爲overloading,但這不是在C.

你應該調用函數別的東西來避免名稱衝突允許的,如my_getline