#include<stdio.h>
#include<stdlib.h> int main()
{
// char *p;//定义一个野指针:没有让它指向一个变量的地址
// *p='c';//直接对野指针进行操作,会报错
char *p1;
p1=malloc(1);//动态开辟内存
*p1='d';
printf("%c\n",*p1); return 0;
}

malloc可以动态在堆上开辟地址,函数原型:void * malloc(size_t size);

strcpy,字符串的拷贝函数,函数原型:char * strcpy(char * dest,const char * src);

#include<stdio.h>
#include<stdlib.h>
#include <string.h> int main()
{
// char *p;//定义一个野指针:没有让它指向一个变量的地址
// *p='c';//直接对野指针进行操作,会报错
char *p1;
p1=malloc(1);//动态开辟地址
*p1='d';
printf("%c\n",*p1);
free(p1);
//将字符串常数拷贝给字符串
char * p2;
p2=(char *)malloc(12);//开辟12个字节的内存空间,并返回指针
strcpy(p2,"strcprtfkjk");//把字符串拷贝给p2
printf("%s\n",p2);//输出字符串
int len=strlen("strcprtfkjk12345664");
//计算新的长度,在原来的内存块上增加长度
int addlen=len-12+1;//+1是为了将'\0'加进来
printf("扩容前地址:%p\n",p2);
realloc(p2,addlen);
printf("扩容后地址:%p\n",p2);
strcpy(p2,"strcprtfkjk12345664");
printf("打印字符串:");
puts(p2);
printf("done\n");
free(p2);
return 0;
}

输出结果:

strcprtfkjk
扩容前地址:0000000000155CB0
扩容后地址:0000000000155CB0
打印字符串:strcprtfkjk12345664
done

注意:

malloc是在堆上开辟内存空间,数组是在栈上开辟空间,堆上的内存在函数结束后会释放,但是堆上的内存只有在程序退出的时候才会释放。

所以使用malloc开辟动态内存空间后一定要记得手动释放,否则将会造成堆内存泄露。

可以使用free函数来释放堆上的内存空间:

free函数原型:free(void * ptr);

realloc函数:realloc(void *ptr,size_t size);//重新调整malloc或者calloc函数分配的指针所指向的内存块的大小,size表示要增加的容量。

最新文章

  1. Socket--Android王国的外交发言人
  2. 使用Android Butterknife
  3. Web方式预览Office/Word/Excel/pdf文件解决方案
  4. [R]R的工作流
  5. j2ee分布式缓存同步实现方案dlcache v1.0.0
  6. Makefile中指示符“include”、“-include”和“sinclude”的区别
  7. mysql中不同事务隔离级别下数据的显示效果--转载
  8. ubuntu下使用脚本交叉编译windows下使用的ffmpeg + X264
  9. Gesture(手势)浅析
  10. 2014华为机试西安地区B组试题
  11. WebView无法放大缩小解决方式
  12. linux文件系统详解
  13. Vagrant下共享目录下静态文件(js/jpg/png等)修改完运行报错
  14. 重载equals方法时要遵守的通用约定--自反性,对称性,传递性,一致性,非空性
  15. 深入Java虚拟机(2)——Java的平台无关性
  16. phpstudy运行时出现没有安装VC库
  17. SQL SERVER LINUX
  18. Android设置shape后改变颜色
  19. HTML&amp;javaSkcript&amp;CSS&amp;jQuery&amp;ajax-XSS
  20. install ceph by ceph-deploy

热门文章

  1. sftp服务器的搭建与连接
  2. 《Java编程思想》读书笔记(四)
  3. RT-Thread Studio增加软件包操作
  4. 新增 Oracle 兼容函数-V8R6C4B0021
  5. Kubernetes 监控:Prometheus Adpater =》自定义指标扩缩容
  6. Python Client API文档
  7. 使用Docker搭建Fluentd
  8. Docker MySql 查看版本的三种方法
  9. C++ 中std::的使用
  10. PAT (Basic Level) Practice 1027 打印沙漏 分数 20