2017-11-22 7 views
-1
#include<stdio.h> 
#include<conio.h> 
#include<string.h> 

void printlength(char a); 

void printlength(char a) 
{ 
    int len = strlen(a); 
    printf("The Length of the String %s is %d ", a, len); 
    getch(); 
} 

void main() 
{ 
    char a[25]; 
    clrscr(); 
    printf("Enter the name"); 
    scanf("%s", &a); 
    printlength(a); 
} 

私はちょうどこれらのエラーで立ち往生し始めました。 私は、パラメータの再宣言にタイプCのプログラミングの不一致

+2

ここで停止してください、Cはあなたがランダムに学ぶことのできる言語ではなく、Cの本を入手してください。 https://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list – Stargateur

+0

コンパイラから警告がありませんでしたか? –

+0

いいえこれはエラーを示したばかりです。今問題に取り組んでいます –

答えて

2

をC言語でパラメータエラーでエラー

型の不一致と 型の不一致の両方を取得しています、私はすぐに一つの問題を見ることができます:

printf("The Length of the String %s is %d ",a,len); 

%sは文字列で使用され、あなたはcharを渡しています。

そして、私はあなたがa&を取り除く必要があり、あなたが

void printlength(char *a) 

Additinallyに変更する必要があり、

printlength(a); 

そしてaはchar配列がここにあることがわかり、そうすることができますscanf()を使用し、バッファオーバーフローを回避するには、

Cプログラミングの教科書は非常に使いやすく、コンパイラーが提供している警告を見てください。これらは回避するのではなく、何かのためのものです。初心者のため

0

パラメータを指定せずにC規格に機能mainに係るタイプchar *の引数を期待%s

int main(void) 

形式指定子ように宣言しなければなりません。それは文字列で関数がprintlength取引することを想定している

scanf("%24s", a); 

を書くことよりも安全ですが、そうscanfの呼び出しでステートメントが少なくとも

scanf("%s", a); 
      ^^^ 

のように記述する必要があります。だから、

void printlength(const char *a); 
        ^^^^^^^^^^^^^ 

のように尖ったデータは、そのパラメータが宣言されなければならない機能で変更されていないことを考慮してもstrlensize_tある標準関数の戻り値の型を取ります。したがって、変数lenは型がsize_tであると宣言されるべきです。

だから、関数内でメインで非標準機能getchの呼び出しを移動することをお勧めし

size_t len = strlen(a); 
printf("The Length of the String %s is %zu\n", a, len); 

があるはずです。

int main(void) 
{ 
    //... 

    getch(); 
}