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

打印 上一主题 下一主题

主题 847|帖子 847|积分 2541

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() 函数的声明。
  1. void *memset(void *str, int c, size_t n)
复制代码
参数


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

该值返回一个指向存储区 str 的指针。
注意事项


  • memset() 并不对指针 ptr 指向的内存区域做边界检查,因此使用时需要确保 ptr 指向的内存区域足够大,制止发生越界访问。
  • memset() 的第二个参数 value 通常是一个 int 类型的值,但实际上只使用了该值的低8位。这意味着在范围 0 到 255 之外的其他值大概会产生未界说的行为。
  • num 参数表示要设置的字节数,通常是通过 sizeof() 或其他本事计算得到的。
模仿实现
  1. void* my_memset(void* ptr, int value, size_t num)
  2. {
  3.         assert(ptr);
  4.         void* ret = ptr;
  5.        
  6.         //循环逐字节拷贝
  7.         while (num--)
  8.         {
  9.                 *(char*)ptr = (char)value;
  10.                 ++(char*)ptr;
  11.         }
  12.         return ret;
  13. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

悠扬随风

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表