C语言memcpy,memmove,memcmp,memset函数

memcpy,memmove,memcmp,memset函数

    • memcpy()函数
    • memmove()函数
    • memcmp()函数
    • memset()函数

memcpy()函数

memcpy()----内存拷贝函数

#include 

函数原型:

void* memcpy(void* destination,const void* source,size_t num);

memcpy()函数从source的位置开始向后复制num个字节的数据到destination的内存位置
memcpy()函数在遇到’\0’的时候不会停下来(strcpy字符串拷贝函数在遇到’\0’的时候会停下来)
destination和source所指向的内容不能重叠,否则得不到想要的结果(VS2013编译器除外)

#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include 
struct Stu
{
	char name[5];
	char sex[3];
	int age;
};
int main()
{
	struct Stu s1[3] = { { "张三", "男", 19 }, { "王五", "女", 20 }, {"李四","男",38} };
	struct Stu s2[3] = { 0 };
	memcpy(s2, s1, sizeof(s1));
	printf("%s %s %d\n", s2[2].name, s2[2].sex, s2[2].age);//李四 男 38
	return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include 
int main()
{
	char str1[20] = "abcefg\0abcefg";
	char str2[20] = { 0 };
	char str3[20] = { 0 };
	memcpy(str2, str1, 10);//执行后,str2的状态如下:abcefg\0abc\0\0\0\0\0\0\0\0\0\0
	strcpy(str3, str1);执行后,str3的状态如下:abcefg\0\0\0\0\0\0\0\0\0\0\0\0\0\0
	printf("%s\n%s\n", str2,str3);
	return 0;
}
输出:
abcefg
abcefg

memcpy()函数模拟实现

memmove()函数

memmove()----内存移动函数
头文件:

#include 

函数原型:

void* memmove(void* destination,const void* source,size_t num);

memmove()函数从source的位置开始向后复制num个字节的数据并将其移动到destination的内存位置
和memcpy()函数的区别就是memmove()函数处理的原内存块和目标内存块是可以重叠的

#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include 
int main()
{
	char str1[20] = "123456789";
	memmove(str1+2, str1, 5); //121234589
	//若是memcpy(str1+2,str1,5);则输出121212189(VS2013编译器除外)
	printf("%s\n", str1);
	return 0;
}

memmove()函数模拟实现

memcmp()函数

memcmp()----内存比较函数
头文件:

#include 

函数原型:

int memcmp(const void* ptr1,const void* ptr2,size_t num);

将从ptr1指针开始的前num个字节和从ptr2指针开始的前num个字节比较
若ptr1>ptr2(前num个字节),返回值>0
若ptr1 若ptr1=ptr2(前num个字节),返回值0

#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include 
int main()
{
	int arr1[10] = { 1, 2, 3, 4, 5, 6, 7 };
	int arr2[10] = { 1, 2, 3, 4, 5, 6, 8, 9 };
	printf("%d\n", memcmp(arr1, arr2, 25));//-1
	printf("%d\n", memcmp(arr1, arr2, 12));//0
	return 0;
}

memcmp()函数模拟实现

memset()函数

memset()----内存设置函数
头文件:

#include 

函数原型:

void* memset(void* s,int c,size_t n);

memset()函数是按字节对内存块进行初始化的
注意:不能用memset()函数将int数组初始化为0和-1之外的其他值
int arr[8];
初始化为0,memset(arr, 0, sizeof(arr));
初始化为-1,memset(arr, -1, sizeof(arr));

#include 
#include 
int main()
{
	int arr[10];
	int i;
	memset(arr,-1, sizeof(arr));
	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}
输出:
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
#include 
#include 
int main()
{
	int arr[10];
	int i;
	memset(arr,1, sizeof(arr));
	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}
输出:
16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009
#include 
#include 
int main()
{
	char arr[] = "hello world";//一个char占1个字节 
	memset(arr, '*', 5);
	printf("%s\n", arr);
	return 0;
}
输出:
***** world

你可能感兴趣的:(笔记,c语言,开发语言,后端)