2016-11-04 4 views
0

코드 논리가 정확하지만 출력을 표시되지 //하지만 문자열

#include<stdio.h> 
    char *concat(char *p1,char *); //function decalaration 
    int main(void) 
    { 
     char a[100],b[100],*q=NULL; //declare two char arrays 
     printf("Enter str1:"); 
     scanf("%s",a); 
     printf("Enter str2:"); 
     scanf("%s",b); 
     q=concat(a,b);  //calling str concat function 
     printf("Concatenated str:%s\n",q); 
     return 0; 
    } 
    char *concat(char *p1,char *p2) //function to concatenate strings 
    { 
     while(*p1!='\0') 
     p1++; 
     while(*p2!='\0') 
     { 
       *p1=*p2; 
       p1++; 
       p2++; 
     } 
     *p1='\0'; 
     printf("Concatenated str=%s\n",p1); //printing the concatenated string 
     return p1; //returning pointer to called function 
    } 

을 연결합니다. //이 코드가 작동하지 않는 이유는 무엇입니까?왜이 프로그램은 연결 문자열을 인쇄하지 않습니까?

+1

을, 당신은'리턴 p1'을 수행 할 때,'* p1'의 값이 무엇인가? –

+0

@gsamaras 나쁘지는 않지만'p1'은 여전히 ​​유효한 문자열을 가리 킵니다. –

+0

잘 예 @Someprogrammerdude,하지만 그가 원하는 .. ..) – gsamaras

답변

1

이 시도 할 수 있습니다 : 당신의`concat` 기능에

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

#define MAXCHAR 100 

void trim_newline(char *str); 
char *concatenate(const char *str1, const char *str2); 
void exit_if_null(void *ptr, const char *msg); 

int 
main(void) { 
    char str1[MAXCHAR], str2[MAXCHAR]; 
    char *concat; 

    printf("Enter str1: "); 
    if (fgets(str1, MAXCHAR, stdin) != NULL) { 
     trim_newline(str1); 
    } 

    printf("Enter str2: "); 
    if (fgets(str2, MAXCHAR, stdin) != NULL) { 
     trim_newline(str2); 
    } 

    concat = concatenate(str1, str2); 

    printf("Concatenated str:%s\n",concat); 

    free(concat); 

    return 0; 
} 

void 
trim_newline(char *str) { 
    int length = strlen(str) - 1; 

    if (str[length] == '\n') { 
     str[length] = '\0'; 
    } 
} 

char 
*concatenate(const char *str1, const char *str2) { 
    char *result; 

    result = malloc(strlen(str1) + strlen(str2) + 1); 
    exit_if_null(result, "Initial Allocation"); 

    strcpy(result, str1); 
    strcat(result, str2); 

    return result; 
} 

void 
exit_if_null(void *ptr, const char *msg) { 
    if (!ptr) { 
     printf("Unexpected null pointer: %s\n", msg); 
     exit(EXIT_FAILURE); 
    } 
} 
+0

멋진 코딩 @RoadRunner –

+0

감사합니다 @ ShubhamS.Naik :) 당신이 대답을 좋아한다면, 그것을 upvote 있는지 확인하십시오. – RoadRunner

5

p1은 연결 문자열의 시작을 나타내지 않습니다. 원본을 저장하고 반환해야합니다.

char *concat(char *p1,char *p2) //function to concatenate strings 
    { 
    char *org = p1; 

    ... 
    return org; 
    } 
+0

정확합니다. 그러나 OP를 조언하여 종이를 사용하고 코드가하는 것을 끌어내는 것이 좋습니다. 그것은 명백합니다. 그리고 그는 배울 것입니다. :) – gsamaras

+0

함수가 표준'strcat()'함수가하는 문제를 겪고 있음을 알아 두십시오. –

관련 문제