2016-11-04 5 views
0

-Code-Strings

#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 
    } 

// verketten Obwohl die Logik korrekt ist, aber es ist nicht die Ausgabe zeigt. // Warum funktioniert dieser Code nicht?Warum druckt dieses Programm keine verkettete Zeichenfolge?

+1

In Ihrem 'concat' Funktion, wenn Sie' Rückkehr p1' tun, was ist der Wert von '* p1'? –

+0

@gsamaras Nicht wirklich schlecht, 'p1' zeigt immer noch auf eine gültige Zeichenfolge. –

+0

Na ja @Someprogrammerdude, aber nicht der, den er will ..;) – gsamaras

Antwort

1

Sie können dies versuchen:

#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

genial Codierung @RoadRunner –

+0

Danke @ ShubhamS.Naik :) Wenn Sie die Antwort mögen, stellen Sie sicher, es zu aktualisieren. – RoadRunner

5

Sie geben p1 zurück, die nicht auf den Anfang der verketteten Zeichenfolge zeigt. Sie müssen nur das Original speichern und es zurückgeben.

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

    ... 
    return org; 
    } 
+0

Genau. Es wäre jedoch schön, dem OP zu empfehlen, ein Stück Papier zu verwenden und zu zeichnen, was er tut! Es ist offensichtlich. Und er wird lernen. :) – gsamaras

+0

Beachten Sie, dass Ihre Funktion das Problem hat, dass die Standardfunktion 'strcat()' funktioniert. –

Verwandte Themen