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

在你的'concat'功能,當你做'回報p1',什麼是'* p1'的價值? –

+0

@gsamaras不是很糟糕,'p1'仍然指向一個有效的字符串。 –

+0

嗯是@Someprogrammerdude,但不是他想要的那個;;) – gsamaras

回答

1

你可以試試這個:

#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 :)如果你喜歡這個答案,一定要注意它。 – RoadRunner

5

您正在返回p1,它不指向連接字符串的開頭。您只需保存原件並將其退回。

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

    ... 
    return org; 
    } 
+0

沒錯。但是,建議OP使用一張紙並畫出他的代碼就行了!很明顯,他會學習。 :) – gsamaras

+0

請注意,您的函數遭受標準'strcat()'函數的影響。 –

相關問題