2015-02-05 101 views
-2

我想弄清楚如何在不使用字符串副本和字符串連接的情況下將兩個* chars連接在一起。concat two * chars w/o字符串函數?

我有這個至今:

char *concat(char *pt1, char *pt2) 
{ 
    char* c; 
    c = malloc(strlen(a) + strlen(b)); 
    return c; 
} 

如果我用的是字符串函數我只是做:

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

任何提示?

+3

爲終止子添加1。 'c = malloc(strlen(pt1)+ strlen(pt2)+ 1);' – 2015-02-05 19:35:48

+0

檢查'malloc()'的返回值。然後從每個字符串複製,直到達到0終止符。 – 2015-02-05 19:39:53

+2

再次!請解釋一下爲什麼這個問題被降低了。有人不明白,請求幫助,並得到downvote? – Quest 2015-02-05 19:56:41

回答

1

Weather Vane所述,爲終止子'\0'加1。在您的功能中使用此功能: -

char *concat(char *str1, char *str2) 
{ 
    char* str3; 
    int i=0; 
    str3 = malloc(strlen(str1) + strlen(str2) + 1); 
    if (str3 == NULL) 
    return NULL; 
    while(*str1){ 
    str3[i++]=*str1++; 
    } 
    while(*str2){ 
    str3[i++]=*str2++; 
    } 
    str3[i]='\0'; 
    return str3; 
} 
+0

當然這是strcpy/strcat等會做的,但會更有效率。我認爲這是一項家庭作業 – pm100 2015-02-05 19:44:19

+0

不是一個家庭作業問題。我知道我必須使用一個循環,但沒有任何我嘗試工作,因爲那個終止字符。謝謝大家! – pfinferno 2015-02-05 20:40:36

1

循環並複製字符。如果你想爲這個特定的操作進行優化,那麼在複製第一個字符串到目標字符串後,你要保留目標字符串的結束指針,並使用它開始複製下一個字符串,而不是循環再次找到結尾或將長度添加到目的地的開始指針。