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()----内存移动函数
头文件:
#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()----内存比较函数
头文件:
#include
函数原型:
int memcmp(const void* ptr1,const void* ptr2,size_t num);
将从ptr1指针开始的前num个字节和从ptr2指针开始的前num个字节比较
若ptr1>ptr2(前num个字节),返回值>0
若ptr1
#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()----内存设置函数
头文件:
#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