嵌入式c语言学习--malloc等用法

代码注释包含malloc,free,realloc,memset,strcpy原型用法

三种指针指向字符串方法:

1. p="abandon";//将字符串"abandon"存储到指针变量p所指向的内存空间
    puts(p);
    //
 2.   char p[] = "hello";

   printf("%s", p); // 输出 "hello"
   //
3.   strcpy(p, "world"); // 将字符串 "world" 复制到 p 所指向的内存空间中

   printf("%s", p); // 输出 "world"

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//malloc,free,memset,realloc,strcopy基本用法

int main()
{
	char *p;
	char *pp;
//malloc:  原型:(void *)malloc(size_t size);
//头名件加上:#include <stdlib.h>
//分配一个整数:int *ptr = (int *)malloc(sizeof(int));

     p = (char *)malloc(10);//50改为10出现错误
	 /*
		在这段代码中,出现了内存越界访问错误(segmentation fault)。

		具体来说,当将字符串 "abandon" 赋值给 p 时,由于字符串的长度为 7,
		而分配给它的内存空间只有 10 个字节,因此会导致内存越界访问错误。
		这是因为在 C 语言中,字符串是以字符数组的形式存储的,
		每个字符占用一个字节的空间。因此,如果要将一个字符串赋值给一个指针变量,
		需要确保该指针变量所指向的内存空间足够大,以容纳整个字符串。

		另外,在将单个字符 'c' 赋值给 pp 时,也会出现类似的问题。
		因为 pp 所指向的内存空间只有一个字节的大小,无法容纳一个字符。
	 */
	 if(p == NULL){
		 printf("malloc erro\n");
		 exit(-1);
		 
		 
	 }//这段代码的作用是检查指针 p 是否为空,如果为空则输出错误信息并退出程序。
	  pp = (char *)malloc(1);
	  if(pp == NULL){
		 printf("malloc erro\n");
		 exit(-1);
		 
		 
	 }
	  memset(pp,'\0',20);// memset() 函数将 pp 所指向的内存空间初始化为空字符('\0')
	  //原型: void *memset(void *buffer, int c, int count);
	  //其中,buffer 为指针或是数组,c 是赋给 buffer 的值,count 是 buffer 的长度。
	  //这个函数在 socket 中多用于清空数组。

	printf("扩容地址:%x \n",pp);
	int len = strlen("abandon246541565149862");
	int newlen = len-20+1;
	realloc(pp,newlen);
	//realloc原型: void *realloc(void *mem_address, unsigned int newsize);
	//mem_address 是指针或是数组,newsize 是需要改变的内存大小。
	printf("扩容后地址:%x \n",pp);
	p="abandon";//传字符串
	puts(p);
	*pp='c';//传单个字符
	puts(pp);
	strcpy(pp,"abandon246541565149862");
	//char *strcpy(char *strDest, const char *strSrc);
	//其中,strDest是目的字符串,strSrc是源字符串。将后复制到前
	puts(pp);
	
	free(pp);//释放新的内存空间
	free(p);
	//void free(void *ptr);
	//ptr是指向要释放的内存块的指针。
	
	
	
/*三种方法将字符串给指针
   p="abandon";//将字符串"abandon"存储到指针变量p所指向的内存空间
	puts(p);
	//
	char p[] = "hello";

   printf("%s", p); // 输出 "hello"
   //
   strcpy(p, "world"); // 将字符串 "world" 复制到 p 所指向的内存空间中

   printf("%s", p); // 输出 "world"


*/	
	
	return 0;
}

结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值