2015-02-05 29 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

循环并复制字符。如果你想为这个特定的操作进行优化,那么在复制第一个字符串到目标字符串后,你要保留目标字符串的结束指针,并使用它开始复制下一个字符串,而不是循环再次找到结尾或将长度添加到目的地的开始指针。