3.memset函数(常用)
*简单使用
memset:memory set
cplusplus的介绍 点我跳转
翻译:
函数
memset
void * memset ( void * ptr, int value, size_t num );
填充内存块
将ptr指向的内存块的前num个字节设置为指定值(解释为无符号char)。
(指针ptr类型为void*,因此可以接受任何类型的数组)
参数
ptr:指向要填充的内存块
value:要设置的值,
num:要设置的字节个数
size_t是无符号整型
返回值
ptr被返回
如将arr数组的每一个字节都设成01
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
int arr[] = { 1,2,3,4,5 };
memset(arr, 1, 5 * 4);//int类型的数组,一个元素占4个字节
return 0;
}
x86环境下,打开内存窗口
输入&arr
注意内存中每一个元素显示为01 01 01 01
十六进制转十进制:1010101H=16843009D(D为Dec的缩写,十进制)
所以在使用memset时要小心,是以字节为单位操作的!!!
同样对于char类型的数组
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
char arr[] = { "12345" };
memset(arr, 1, 5);
return 0;
}
memset处下断点
执行至return 0;后
char数组每个元素占1个字节,\x1为十六进制的1
注意:用memset改动时要小心,不能越界访问!
否则显示
4.memcmp函数
memcmp:memory compare
cplusplus网的介绍 点我跳转
翻译:
函数
memcmp
int memcmp ( const void * ptr1, const void * ptr2, size_t num );
比较两个内存块
比较分别由ptr1和ptr2指向的前num个字节的内存块,如果两者相等,返回0,如果他们两个不同(较大或较小),返回非0数字
注意memcmp不同于strcmp,memcmp找到\0后不会停止比较(免疫\0)
参数
ptr1:指向内存块的指针
ptr2:指向内存块的指针
num:要比较的字节数
返回值
返回一个整型数值表明两个内存块的内容之间的关系
比较arr1和arr2的前14个字节
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
int arr1[] = {1,2,3,4,5};
int arr2[] = { 1,2,3,4 };
int ret = memcmp(arr1, arr2, 14);
printf("%d", ret);
return 0;
}
x86环境下,打开内存窗口,输入&arr1
第14个字节为画圈处
输入&arr2
第14个字节为画圈处
前14个字节都一样,返回0