2013-08-22 90 views
0

我有以下程序无法合并两个字符串,因为string1没有足够的空间来容纳合并的字符串。当string1没有足够的空间并且没有使用额外的数组来保存合并的字符串如何返回合并的字符串?如何合并两个字符串

#include<stdio.h> 
#include<string.h> 
int main() 
    { 
     void strcat2(char *str1,char *str2); 
     strcat2("john","kris"); 
     getchar(); 
    } 
    void strcat2(char *str1,char *str2) 
    { 
    for (; *str1++;); 
    for (;*str1++ =*str2++;); 

    } 
+6

这么多**未定义的行为**,这么短的时间。 – WhozCraig

+0

这可能是有用的http://stackoverflow.com/questions/308695/c-string-concatenation – 2013-08-22 18:01:52

+0

使用malloc分配合适的空间来保存结果。 –

回答

3

你可以试试这个,因为这是一个更好的,或只是分配更多space.:-

#include <stdlib.h> 
#include <string.h> 

char* concat(const char *s1, const char *s2) 
{ 
    char *result = malloc(strlen(s1)+strlen(s2)+1); 

    strcpy(result, s1); 
    strcat(result, s2); 
    return result; 
} 
+0

建议'concat(const char * s1,const char * s2)'。 – chux

+0

@chux: - 明白了。更新了答案! –

2

在C,你必须做你自己的内存分配。这意味着一般情况下函数不可能以垃圾收集语言的方式返回字符串。当你需要从一个函数返回一个字符串时,你必须传递结果字符串,由调用者预先分配,否则动态分配它并依赖调用者释放它。

C中没有捷径,你只需要做这项工作。