2016-10-23 4 views
-1
#include <stdio.h> 
#include <stdlib.h> 

char wordsum(char FW[256],char SW[256]){ 
    int i; 
    int j=strlen(FW); 
    for (i=0;i<=strlen(SW);i++) 
     FW[i+j+1]=SW[i]; 
    printf("%c",FW); 
    return FW; 
} 

int main() 
{ 
    char F[256]; 
    char S[256]; 
    printf("Enter the first word\n"); 
    gets(F); 
    printf("Enter the Second word\n"); 
    gets(S); 
    wordsum(F,S); 
    return 0; 
} 

strcatを機能させるために私のコードに何が間違っているかわかりません。私は答えを見つけることを望む。Cでstrcat関数を作成する私のコード関数に何が問題なのですか?

+3

'FWは、[I + jが] = SW [i]は'試してみてください。 (現在のコードでは 'SW'は' FW'の '0'の終了直後にコピーされます。) – AlexD

+0

...ヌル文字列ターミネータ' '\ 0''を書いてください。 –

+1

printf( "%s"、FW); ' – AlexD

答えて

1

あなたの機能のいくつかの問題がありますが、私が変更した、以下、それらを次のようにコメントし

char *wordsum(char FW[256],char SW[256]){  // correct function type 
    int i; 

    int j=strlen(FW); 

    for (i = 0; i <= strlen(SW); i++) 
     FW[i+j] = SW[i]; //change 'i + j + 1' to 'i + j' 

    printf("%s",FW); //change format specifier as you are printing string not character 

    return FW; 
} 

は、次に呼び出し関数(ここではmain())でchar*変数を使用して返されたポインタを捕獲することを忘れドット

char *result; 
result = wordsum(F,S); 
printf("\n%s\n", result); 

の作業例:https://ideone.com/ERlFPE

1

コードにいくつか間違いがあります。それらは次のとおりです。

1)関数はC言語の配列を返すことはできません。そうする必要はありません。右、wordsumvoidcharから戻り値の型を変更し、あなたが文字列を印刷したい行return FW;

2)を消去?文字列の書式指定子は%sです。したがって、printf("%c",FW);の代わりにprintf("%s",FW);と書いてください。

3)これを実行します。FW[i+j]=SW[i];i+jに余分な1を追加したのはなぜですか?論理的に考えてみてください。

4)strlen()のヘッダーファイルを追加すると、<string.h>となります。

5)FW[i+j]=SW[i];の前後のアスタリスクマークを消去します。

2

私はこのコードがC言語の詳細を学ぶために書かれているものとします。もしそうなら、私はstrlen()を使用しない代替実装を提示してもよいでしょう。その意図は、言語に本当に素晴らしい機能のいくつかを提示することです。最初に頭を囲むのはちょっと複雑かもしれませんが、IIRCのコードはK & Rの本The C Programming Languageにあります。

は、ここに私達は行く:

char* mystrcat(char *dest, const char *src) 
{ 
    char *ret = dest; 

    while (*dest) 
     dest++; 

    while ((*dest++ = *src++)) 
     ; 

    return ret; 
} 

最初のwhileループは、先の文字列の末尾を見つけました。 2番目のwhileループは、送信元文字列を宛先文字列に追加します。最後に、元のdestバッファへのポインタを返します。

この関数は、ポインタを返さなかった場合でも、さらにうまくいっていた可能性があります。

void mystrcat(char *dest, const char *src) 
{ 
    while (*dest) 
     dest++; 

    while ((*dest++ = *src++)) 
     ; 
} 

HTH

関連する問題