2016-10-23 36 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

...並寫入一個nul字符串結束符''\ 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中的數組,你不需要這麼做。改變從char返回類型的wordsumvoid和擦除你想打印一個字符串行return FW;

2),對不對?字符串的格式說明符是%s。所以寫printf("%s",FW);而不是printf("%c",FW);

3)操作方式:FW[i+j]=SW[i];。爲什麼你增加一個到i+j?只要邏輯思考。

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循環查找目標字符串的結尾。第二個while循環將源字符串附加到目標字符串。最後,我們返回一個指向原始目標緩衝區的指針。

如果函數沒有返回指針,它可能會更好。

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

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

HTH