串的堆分配存储结构1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
int main(){
char *a1=NULL;
char *a2=NULL;
a1=(char*)malloc(10*sizeof(char));
strcpy(a1,"abcd");//用strcpy函数讲字符串"abcd"复制到刚刚申请的空间a1中去
a2=(char*)malloc(10*sizeof(char));
strcpy(a2,"efgh");//同上
int lengthA1=strlen(a1);//a1的长度
int lengthA2=strlen(a2);//a2的长度
//尝试将合并的串存储在 a1 中,如果 a1 空间不够,则用realloc动态申请
if(lengthA1<lengthA1+lengthA2){
a1=(char*)realloc(a1,(lengthA1+lengthA2+1)*sizeof(char));
}
//合并两个串到 a1 中
for(int i=lengthA1;i<lengthA1+lengthA2;i++){
a1[i]=a2[i-lengthA1];
}
//串的末尾要添加 \0,避免出错
a1[lengthA1+lengthA2]='\0';
printf("%s",a1);//打印拼接后的字符串
//用完动态数组要立即释放
free(a1);
free(a2);
return 0;
}
运行结果1
abcdefgh