含有‘\0’的字符串怎么相连接

char* p1 ="a\0h";
char* p2 ="sadfasfdf";
怎么把p2字符串加到p1后面?

注意:如果是以char*的形式定义有'\0'的字符串是有一点问题的:怎么判断字符串结束?
所以可以加一个变量表示p1的大小。
注:假设p2没有'\0'。

char* my_strcat(char* p1,char* p2,int size_p1){
    int i=size_p1-1; //达到最后的'\0'处
    for(;;++i){
                p1[i]=p2[i+1-size_p1];
                if(p2[i+1-size_p1]=='\0') break;
        }
    return p1;
}

注意:如果主函数中p1和p2是char*型,会段错误。

直接当作字节数据用memcpy函数拷贝内存,前提是知道你两个指针数据的长度,缓冲区空间足够。

char* p1 ="a\0h";
char* p2 ="sadfasfdf";
char buffer[100];
memcpy(&buffer[0], p1, 3);
memcpy(&buffer[3], p2, 9);

用memcpy函数来执行操作比较见到快捷,具体的memcpy函数用法是:
原型:void *memcpy(void *dest, const void *src, size_t n);

第一个参数是从第几个位置开始导入,第二个参数代表要导入的数据,的第三个参数是要导入数据的长度

详情好比上面同僚写的代码一致。

/*方法一,不改变字符串a,b, 通过malloc,生成第三个字符串c, 返回局部指针变量*/
char *join1(char *a, char *b) {
char *c = (char *) malloc(strlen(a) + strlen(b) + 1); //局部变量,用malloc申请内存
if (c == NULL) exit (1);
char *tempc = c; //把首地址存下来
while (*a != '\0') {
*c++ = *a++;
}
while ((*c++ = *b++) != '\0') {
;
}
//注意,此时指针c已经指向拼接之后的字符串的结尾'\0' !
return tempc;//返回值是局部malloc申请的指针变量,需在函数调用结束后free之
}

/*方法二,直接改掉字符串a,*/
void join2(char *a, char *b) {
//注意,如果在main函数里a,b定义的是字符串常量(如下):
//char *a = "abc";
//char *b = "def";
//那么join2是行不通的。
//必须这样定义:
//char a[4] = "abc";
//char b[4] = "def";
while (*a != '\0') {
a++;
}
while ((*a++ = *b++) != '\0') {
;
}
}

/*方法三,调用C库函数,*/
char* join3(char *s1, char *s2)
{
char *result = malloc(strlen(s1)+strlen(s2)+1);//+1 for the zero-terminator
//in real code you would check for errors in malloc here
if (result == NULL) exit (1);

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

return result;

}

p1=replace(p1,"\0","shitshit")
p2=replace(p2,"\0","shitshit")
p3=replace(p1+p2,"shitshit","\0")

vb里我这样写,考虑下呗