C函数返回连接字符串

时间:2015-04-13 23:08:54

标签: c string function pointers concatenation

我试图在C中创建一个函数来返回一个字符串,该字符串是连接两个较小字符串的结果。我的代码如下所示:

const char *concat(char* s1, char* s2){
    char ns[strlen(s1) + strlen(s2) + 1];
    ns[0] = '\0';
    strcpy(ns, s1);
    strcpy(ns, s2);
    return ns;
}

我理解字符串ns仅存在于函数的范围内并且不能返回,但是指针字符串不可编辑并且会破坏函数的用途。有更好的方法可以做到这一点,还是功能从根本上是有缺陷的?

3 个答案:

答案 0 :(得分:3)

你可以使用这个例子,使用strcat()是非常简单的方法:

#include <stdio.h>
#include <string.h>

void concat(char* s1, char* s2, char* ns) {
    ns[0] = '\0';
    strcpy(ns, s1);
    strcat(ns, s2);
}

int main(int argc, char const *argv[])
{
    char* s1="hola";
    char* s2 =" mundo";
    char s3[strlen(s1) + strlen(s2) + 1];
    concat(s1, s2, s3);

    printf("\n%s",s3);
    printf("\n");
    return 0;
}

查找更多信息here

答案 1 :(得分:1)

通过使用malloc()在堆内存中创建动态字符串来解决:

const char *concat(char* s1, char* s2){
    char *ns = malloc(strlen(s1) + strlen(s2) + 1);
    ns[0] = '\0';
    strcat(ns, s1);
    strcat(ns, s2);
    return ns;
}

尽管如此,请确保free()内存。

答案 2 :(得分:0)

连接两个字符串的C函数是strcat!

int main(void)
{
    char *s1="Good ";
    char *s2="luck";

    char ns[12];

    strcpy(ns,s1);
    strcat(ns,s2);

    printf("%s\n",ns);

    return 0;
}

您也可以这样使用strcat:

strcpy(ns,s1);
printf("%s\n", strcat(ns,s2));