如何在c中连接两个char数组?

时间:2016-10-22 18:41:47

标签: c

我决定尝试创建一个连接函数,因为strcat不适用于字符,只能用于字符串。

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

char concat(char a[], char b[]);

int main ()
{
   char *con =  concat("hel", "lo");
   return(0);
}

char concat(char a[], char b[]){
   int lena = strlen(a);
   int lenb = strlen(b);
   char con[lena+lenb];
   con[0] = a;
   con[lena] = b;
   printf("%s", con);
   return con;
}

此代码打印“Ã...ÃÆ”。不知道我哪里出错了?

由于

1 个答案:

答案 0 :(得分:3)

首先,您不应该返回对临时

的引用
char con[lena+lenb];

(请注意,由于您在函数中打印),因此您获得的垃圾并非来自

其次,你没有分配足够的内存:应该是(第一个问题已修复):

char *con = malloc(lena+lenb+1);

然后使用strcpy / strcat,它更快,你的原始代码没有做任何有用的事情(混合字符数组的字符和数组的大小目前还不知道:那是< / em>你得到的垃圾的原因):

strcpy(con,a);
strcat(con,b);

或者有人认为它们是不安全的功能,因为我们知道输入的大小我们可以写:

memcpy(con,a,lena);
memcpy(con+lena,b,lenb+1);

另外:concat的原型确实是错误的。它应该是:

 char *concat(const char *a, const char *b){

(因为它返回chars上的指针而不是char。而且参数应该是常量指针,所以你可以将你的函数用于任何字符串)

并且你已经完成了(当你完成它时不要忘记释放字符串)

固定代码(经过测试,令人惊讶地返回hello,可能是因为它使用gcc -Wall -Wwrite-strings -Werror编译时没有错误。我的建议:打开警告并阅读它们。你将解决80%的问题方式):

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

char *concat(const char *a, const char *b);

int main ()
{
    char *con =  concat("hel", "lo");
    printf("%s\n",con);
    return(0);
}

char *concat(const char *a, const char *b){
    int lena = strlen(a);
    int lenb = strlen(b);
    char *con = malloc(lena+lenb+1);
    // copy & concat (including string termination)
    memcpy(con,a,lena);
    memcpy(con+lena,b,lenb+1);        
    return con;
}