我已经编写了一个连接两个字符串的程序,它在运行时在行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)
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.