2016-07-03 2 views
0

メインの後ろにmainと同じ数の引数を持つ関数&が定義される前にプロトタイプを提供しました。私は同じ数の引数でgetline関数を呼び出しています。しかし、私はまだ相反するタイプのエラー&もあまりにも少ない引数のエラーを取得しています。関数の型が矛盾していて、関数呼び出しに引数があまりにも少ない

#include <stdio.h> 
#define MAXLINE 1000 

int getline (char line[], int maxline); 
void copy (char from[], char to[]); 

int main(int argc, const char * argv[]) { 

    // insert code here... 
    int len; 
    int max; 
    char currentline[MAXLINE]; 
    char longestline[MAXLINE]; 
    max=0; 
    while ((len= getline(currentline, MAXLINE)) > 0) { 
     if (len > max) { 
      max = len; 
      copy(currentline,longestline); 
     } 
    } 
    if (max > 0) 
     printf("Longest Line : %s",longestline); 
    return 0; 

} 

int getline (char line[],int maxline) { 
    int c,i; 
    i=0; 
    while((c=getchar())!='0' && (c=getchar()) !='\n') { 
     if (c !='\n' && i < maxline-1) { 
      line[i]=c; 
     } 
    } 
    if (c == '\n') { 
     line[i++]=c; 
     line[i]='\0'; 
    } 
    return i; 
} 
void copy (char from[], char to []) { 
    int i; 
    i=0; 
    while((to[i]=from[i])!='\0') 
     i++; 
    } 
+0

コードをコンパイルするとエラーが表示されません。どのコンパイラを使用していますか?どのようにそれを実行するのですか?そして、あなたが実際にコンパイルしているコードであることを確信していますか?そのため、ファイルの異なるバージョンでは間違いがありませんか? –

+4

POSIX関数 'getline()'には3つの引数がありますが、 'stdio.h'に宣言されています。あなたの宣言/定義はおそらくそれと矛盾しているでしょう。 – Dmitri

+0

getline関数は、標準的なC関数ではありませんが、Linux/GCCで定義されているようです。たぶんあなたはそれと葛藤しているでしょう。 getline関数の名前を変更しようとしましたか? –

答えて

2
test.c:5:5: error: conflicting types for 'getline' 
int getline (char line[], int maxline); 
    ^
/usr/include/stdio.h:442:9: note: previous declaration is here 
ssize_t getline(char ** __restrict, size_t * __restrict, FILE * __restrict) ... 

私は、あなたの質問に答える願っています。あなたの関数getline()は、標準ライブラリstdio.hで定義された関数と同じ名前です。そのため、エラーが発生しています。 関数名を変更するだけです。

+0

こんにちは 機能の名前を変更すると助けになりました。それは何の誤りもなく通過しました。名前をgetline_1に変更しました。 stdio.hの関数と矛盾しているように見えます。ご協力いただきありがとうございます。 しかし私にはもう1つの質問があります。私のファイルにある関数の最新の定義がstdio.hの定義を上書きしないでしょうか?それはパラメータの数に基づいて定義を拾いませんか?親切にアドバイス。 –

+0

Javaでは、それが可能です - それは*関数のオーバーロードと呼ばれます*。 Cにはそのような概念はありません。私は、Cがそれがシンボルテーブルを構築する方法は、Javaがそれを行う方法とは異なると信じています。それが理由です。 –

関連する問題