嵌入式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
    评论
嵌入式C语言中,指针是一个非常重要的概念。它允许我们直接访问内存中的数据,并有效地操作和传递数据。以下是一些嵌入式C语言指针的常见用法: 1. 变量地址获取:可以使用指针获取变量在内存中的地址,通过在变量名前加上 '&' 符号来获取。例如,如果有一个整数变量 x,可以使用 int *ptr = &x; 来获取 x 的地址,并将其存储在指针变量 ptr 中。 2. 间接访问:通过指针,可以间接地访问和修改变量的值。例如,如果有一个指针变量 ptr 指向一个整数变量 x,可以使用 *ptr 来访问和修改 x 的值。例如,*ptr = 10; 将会把 x 的值修改为 10。 3. 动态内存分配:在嵌入式系统中,内存资源通常是有限的。使用指针,我们可以在运行时动态地分配和释放内存。通过使用函数如 malloc() 和 free(),可以分配和释放堆内存。例如,int *ptr = (int *)malloc(sizeof(int)); 可以动态地分配一个整数大小的内存块,并将其地址存储在指针变量 ptr 中。 4. 数组访问:指针也可以用于访问数组元素。数组名本身就是一个指向数组首元素的指针。可以通过指针进行数组元素的访问和操作。例如,int arr[5]; int *ptr = arr; 可以将数组 arr 的首地址存储在指针变量 ptr 中,并通过指针操作数组元素。 5. 函数指针:在嵌入式系统中,函数指针是一种常见的用法。通过函数指针,可以动态地调用不同的函数。例如,定义一个函数指针变量 int (*funcPtr)(int, int); ,然后将其指向不同的函数,可以在运行时决定调用哪个函数。 这些只是嵌入式C语言指针的一些常见用法,它们在嵌入式系统开发中非常重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值