c中malloc申请堆空间
具体使用以文件读写为例,把文件读到内存中再写入另一个文件
void test22() {
int *pr;
pr = (int *)malloc(sizeof(int)*128);//申请128个int4字节空间
if (pr == NULL) {//判断是否申请成功
return;
}
memset(pr,0,sizeof(int)*128);//初始化空间为0
free(pr);//释放空间
pr = NULL;
}
具体使用以文件读写为例,把文件读到内存中再写入另一个文件
void test23() {
char *pr;
char *prr;
FILE *myf = NULL;
FILE *myTF = NULL;
int size = 0;
int i = 0;
//二进制打开文件
myf = fopen("E:/vs/work/calc.exe","rb");
myTF = fopen("E:/vs/work/test.exe", "wb");
//判断文件是否打开成功
if (!myf) {
printf("\nerror:wen jian");
return;
}
if (!myTF) {
printf("\nerror:wen jian");
return;
}
//计算文件大小
if ((fseek(myf,0L, SEEK_END))) {
printf("\nerror:pian yi");
return;
}
size = ftell(myf);
if (size == 0) {
printf("\nerror:dax iao");
return;
}
printf("\nget file size:%x", size);
//申请空间
pr = (char *)malloc(sizeof(char) * size);
if (pr == NULL) {
printf("\nerror:nei cun");
return;
}
//初始化空间
memset(pr, 0, sizeof(char) * size);
//定位指针到开头
fseek(myf, 0L, 0L);
//一个个字符写入内存
prr = pr;
while (++i <= size)
{
*pr = fgetc(myf);
pr++;
}
//或者直接二进制写入内存
i = 0;
i = fread(pr,size,1,myf);
printf("\nread file date number:%x", i);
//指针回到首地址
pr = prr;
printf("\nget file date location:%x", prr);
i = 0;
//二进制写入文件
i = fwrite(pr, size, 1, myTF);
printf("\nwrite file date number:%x",i);
printf("\nput OK !");
//释放内存关闭文件
free(pr);
pr = NULL;
prr = NULL;
fclose(myf);
fclose(myTF);
}