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

시도

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

은'FW는 SW = [I] '[내가 J +]한다. (현재 코드에서'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)는 <string.h>있어, strlen()에 대한 헤더 파일을 추가합니다.

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 루프는 소스 문자열을 대상 문자열에 추가합니다. 마지막으로 원래 dest 버퍼에 대한 포인터를 반환합니다.

포인터를 반환하지 않은 경우 함수가 더 멋 졌을 수 있습니다. HTH는