欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > 60.【C语言】内存函数(memset,memcmp函数)

60.【C语言】内存函数(memset,memcmp函数)

2025/9/20 4:09:33 来源:https://blog.csdn.net/2401_85828611/article/details/142411190  浏览:    关键词:60.【C语言】内存函数(memset,memcmp函数)

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 );

比较两个内存块

比较分别由ptr1ptr2指向的前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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词