C使用malloc和realloc拼接字符串问题


  void connectStr(char *str1,char *str2){
    int len = strlen(str1);
    char *p = (char *)malloc(sizeof(char) * len);
    for(int i=0;i<len;i++){
        p[i] = str1[i];
    }
    int len1 = strlen(str2);
    char *pp = (char *)realloc(p,sizeof(char)*(len+len1));    
    int index = len;
    for(int i=0;i<len1;i++){
        pp[index++] = str2[i];
    }
    printf("%s",pp);
}

int main(){
    char *str1 = "123";
    char *str2 = "abc";
    connectStr(str1,str2);
    return 0;
}

为啥输出的是123abc和一个随机的字符?

char *pp = (char )realloc(p,sizeof(char)(len+len1));
字符串全部填满了,应该留一个结尾字符\n
故而应该是

void connectStr(char *str1,char *str2){
    int len = strlen(str1);
    char *p = (char *)malloc(sizeof(char) * len);
    for(int i=0;i<len;i++){
        p[i] = str1[i];
    }
    int len1 = strlen(str2);
    char *pp = (char *)realloc(p,sizeof(char)*(len+len1 + 1));    
    int index = len;
    for(int i=0;i<len1;i++){
        pp[index++] = str2[i];
    }
pp[index] = '\0';
    printf("%s",pp);
}
 
int main(){
    char *str1 = "123";
    char *str2 = "abc";
    connectStr(str1,str2);
    return 0;
}