首页 > 其他分享 >模拟实现 memset --浅谈C语言

模拟实现 memset --浅谈C语言

时间:2024-08-05 14:08:32浏览次数:9  
标签:浅谈 -- void memset C语言 内存 str ptr

memset()

描述

C 库函数 void *memset(void *str, int c, size_t n) 用于将一段内存区域设置为指定的值。

memset() 函数将指定的值 c 复制到 str 所指向的内存区域的前 n 个字节中,这可以用于将内存块清零或设置为特定值。

在一些情况下,需要快速初始化大块内存为零或者特定值,memset() 可以提供高效的实现。

在清空内存区域或者为内存区域赋值时,memset() 是一个常用的工具函数。

声明

void *memset(void *ptr, int value, size_t num);

下面是 memset() 函数的声明。

void *memset(void *str, int c, size_t n)

参数

  • str -- 指向要填充的内存区域的指针。
  • c -- 要设置的值,通常是一个无符号字符。
  • n -- 要被设置为该值的字节数。

返回值

该值返回一个指向存储区 str 的指针。

注意事项

  • memset() 并不对指针 ptr 指向的内存区域做边界检查,因此使用时需要确保 ptr 指向的内存区域足够大,避免发生越界访问。
  • memset() 的第二个参数 value 通常是一个 int 类型的值,但实际上只使用了该值的低8位。这意味着在范围 0255 之外的其他值可能会产生未定义的行为。
  • num 参数表示要设置的字节数,通常是通过 sizeof() 或其他手段计算得到的。

模拟实现

void* my_memset(void* ptr, int value, size_t num)
{
	assert(ptr);
	void* ret = ptr;
	
	//循环逐字节拷贝
	while (num--)
	{
		*(char*)ptr = (char)value;
		++(char*)ptr;
	}
	return ret;
}

标签:浅谈,--,void,memset,C语言,内存,str,ptr
From: https://www.cnblogs.com/DSCL-ing/p/18342323

相关文章

  • 模拟实现 strcmp(字符串比较) --浅谈C语言
    C库函数-strcmp()描述C库函数intstrcmp(constchar*str1,constchar*str2)把str1所指向的字符串和str2所指向的字符串进行比较。声明下面是strcmp()函数的声明。intstrcmp(constchar*str1,constchar*str2)参数str1--要进行比较的第一个字符串。......
  • C语言指针(3)
    目录一、字符指针变量二、数组指针变量三、⼆维数组传参的本质四、函数指针变量五、typedef关键字六、函数指针数组一、字符指针变量字符指针char*&符号名 符号名,这都是获取的是首元素地址。intmain(){ chara[]="abcdef"; char*pc=&a; *pc='w'; ......
  • C语言指针(1)
    目录一、内存和地址1、生活中的例子2、内存的关系二、指针变量和地址1、&符号,%p占位符2、一个简单的指针代码。3、理解指针4、解引用操作符5、指针变量的大小。三、指针变量类型的意义1、指针解引用的作用2、指针+指针3、指针-指针4、void*指针四、const修饰指......
  • 浅谈SQL sever游标
    一、什么是游标?游标是一种用来遍历数据库结果集的机制,它允许用户逐行处理查询结果。在SQLServer中,游标是一种可编程的对象,可以在存储过程或触发器中使用。使用游标可以逐行处理查询结果,执行复杂的逻辑操作,以及在处理数据时进行一些特定的操作。游标通常用于需要逐行处理......
  • C语言--轮圈机制
    数据是以二进制补码形式存储在计算机内存中,而数据类型限制了数据的大小,种类,范围,精度等。在存储二进制数据时,常常遇到存储的数值超出数据类型范围的情况。而这时的存储原理又是怎样的呢?根据实践,不难总结出一个规律,计算机存储的数据在一个范围内循环。如下图所示。有符号和无符......
  • 模拟实现 memmove --浅谈C语言
    内存移动-memmove也是拷贝函数,源字符串可能会被覆盖,但保证目标是想要的描述C库函数void*memmove(void*str1,constvoid*str2,size_tn)从str2复制n个字符到str1,但是在重叠内存块这方面,memmove()是比memcpy()更安全的方法。如果目标区域和源区域有重叠的......
  • 嵌入式学习第15天——C语言二维数组、字符数组
    二维数组定义二维数组本质上是一个行列式的组合,也就是说二维数组是有行和列两部分构成。二维数组数据是通过行列进行解读。二维数组可被视为一个特殊的一维数组,相当于二维数组又是一个一维数组,只不过它的元素是一维数组。语法 类型数组名[行数][列数]举例: intarr[3]......
  • 【C语言】《C语言基础指南!》- 史上最全!
    目录C语言基础精讲1.C语言简介1.1.C语言的历史1.2.C语言概述1.3.C语言的特点2.基本语法2.1.程序结构2.2.数据类型3.变量和常量3.1.变量声明与初始化3.2.常量定义4.控制结构4.1.条件语句4.2.循环语句5.函数5.1.函数定义5.2.函数调用6.数组和字符串......
  • c语言数据结构单链表中随机链表的复制
    c语言数据结构单链表中随机链表的复制文章目录c语言数据结构单链表中随机链表的复制1.随机链表的复制问题2.解决思路3.代码的实现1.随机链表的复制问题给你一个长度为nn......
  • 模拟实现 strstr(字符串查找) --浅谈C语言
    C字符串查找-strstr()描述C库函数char*strstr(constchar*haystack,constchar*needle)在字符串haystack中查找第一次出现字符串needle的位置,不包含终止符'\0'。声明下面是strstr()函数的声明。char*strstr(constchar*haystack,constchar*needle)参......