char * a = (char*)malloc(5*sizeof(char));此行代码创建了一个动态数组 a,通过使用 malloc 申请了 5 个 char 类型大小的堆存储空间。
a = (char*)realloc(a, 10*sizeof(char));通过使用这行代码,之前具有 5 个 char 型存储空间的动态数组,其容量扩大为可存储 10 个 char 型数据。
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char * a1 = NULL; char * a2 = NULL; a1 = (char*)malloc(10 * sizeof(char)); strcpy(a1, "data.bian");//将字符串"data.bian"复制给a1 a2 = (char*)malloc(10 * sizeof(char)); strcpy(a2, "cheng.net"); 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; }程序运行结果:
data.lmcjl.com
注意,程序中给 a1 和 a2 赋值时,使用了 strcpy 复制函数。这里不能直接用 a1 ="data.biancheng",程序编译会出错,报错信息为 "没有 malloc 的空间不能 free"。因为 strcpy 函数是将字符串复制到申请的存储空间中,而直接赋值是字符串存储在别的内存空间(本身是一个常量,放在数据区)中,更改了指针 a1 和 a2 的指向,也就是说,之前动态申请的存储空间虽然申请了,结果还没用呢就丢了。
本文链接:http://task.lmcjl.com/news/4842.html