2016-11-04 2 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

Thanks @ 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()'関数があなたの関数に問題があることに注意してください。 –

関連する問題