内存操作函数

内存操作函数memcpy

格式:void * memcpy(void *dest, const void *source, size_t n)

定义:从存储区source赋值n个字节到存储区dest

注:

  • memcpy可以拷贝除了字符类型的其他数据类型的数据,strcpy只能拷贝字符型数据

  • 函数memcpy从source的位置开始向后复制n个字节的数据到dest的内存位置。

  • 这个函数在遇到’\0’的时候并不会停下来。

  • 如果source和dest有任何重叠,复制的结果都是未定义的。

内存操作函数memmove

格式:void *memmove(void *dest, const void *src, size_t n);

作用:从src复制n个字符到dest,但是在重置内存块这方面,memmove()是比memcpy()更安全的方法。如果目标区域和源区域有重叠的话,memmove()能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,复制后源区域的内容会被更改。如果目标区域与源区域没有重叠,则和memcpy()函数功能相同。

例子

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
	char *pa = NULL;
	char *pb = NULL;
	pa = (char *)malloc(sizeof(char)*20);
	pb = (char *)malloc(sizeof(char)*30);
	memset(pa, 0, sizeof(char)*20);
	memset(pb, 0, sizeof(char)*30);
	//这样赋值在栈中可以,在malloc申请的堆空间下不行 
//	pa = "hello world";
//	pb = "BSP2208class";
	//在堆空间下应该这样赋值
	strcpy(pa, "hello world");
	strcpy(pb, "BSP2208class"); 
	int i;
//	for(i = 0; i < 10; i++)
//	{
//		pa[i] = 'a'+i;
//	}
//	
//	for(i = 0; i< 20; i++)
//	{
//		pb[i] = 'A'+i;
//	}
	memcpy(pb,pa,sizeof(char)*10);
	printf("%s\n",pb);
	
	free(pa);
	free(pb);
	pa = NULL;
	pb = NULL;
	
	return 0;
}

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
	char *pa = NULL;
	char *pb = NULL;
	
	pa = malloc(sizeof(char)*20);
	pb = realloc(pa, sizeof(char)*50);
	printf("%p\n",pa);
	printf("%p\n",pb);
	
	strcpy(pa, "hello world");
	strcpy(pb, "BSP2208class");
	memmove(pb, pa, sizeof(char)*10);
	printf("%s\n", pb);
	
	free(pb);
	pb = NULL;
	
	return 0;
}

字符串大写转小写函数strlwr

格式:char *strlwr(char *s1)

作用:将字符串s1中的大写转换为小写,返回s1的值

字符串小写转大写函数strupr

格式:char *strupr(char *s1)

作用:将字符串s1中的小写转换为大写,返回s1的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值