C中的连接程序

AGe*_*eek 1 c

我已经编写了一个连接两个字符串的程序,它在运行时在行s1 [i + j] = s2 [j],for for循环中抛出分段错误.....我无法弄清楚,为什么会发生这样的事情....请关注我,我哪里出错了.

char* concatenate(char *s1, char *s2)
{
   int i,j=0;

   for(i=0; s1[i] != '\0'; i++);
   for(j=0; s2[j] != '\0'; j++)
   {
      s1[i+j] = s2[j];
   }
   s1[i+j] = s2[j];

   return s1;
}
Run Code Online (Sandbox Code Playgroud)
   char *s1 = (char *) malloc(15);;
   char *s2 ;

   s1 = "defds";
   s2 = "abcd";

   s1 = concatenate(s1,s2);
//   printf("\n\n%s\n\n",s1);
Run Code Online (Sandbox Code Playgroud)

Jam*_*lis 8

s1 = "rahul";
Run Code Online (Sandbox Code Playgroud)

该行不会将字符串"rahul"复制到指向的缓冲区中s1; 它重新指定指向s1(不可修改)字符串文字"rahul"

您可以使用concatenate两次函数获得所需的功能:

char *s1 = (char *) malloc(15);

s1[0] = '\0'; // make sure the buffer is a null terminated string of length zero
concatenate(s1, "rahul");
concatenate(s1, "bagai");
Run Code Online (Sandbox Code Playgroud)

请注意,该concatenate函数仍然有点不安全,因为它盲目地复制字节,就像strcat它一样.您要么非常确定您传递的缓冲区足够大,要么修改它以获取像take一样的缓冲区长度strncat.