忙贬 发表于 2025-6-4 18:57:48

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

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位。这意味着在范围 0 到 255 之外的其他值可能会产生未定义的行为。
[*]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;
}
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

粒浊 发表于 2025-10-22 09:18:22

感谢分享

芮梦月 发表于 2025-11-5 20:55:30

喜欢鼓捣这些软件,现在用得少,谢谢分享!

阙忆然 发表于 2025-11-11 06:58:37

过来提前占个楼

城徉汗 发表于 2025-12-4 00:11:29

过来提前占个楼

廖雯华 发表于 2025-12-9 07:41:27

感谢,下载保存了

敛饺乖 发表于 2025-12-10 09:15:38

这个有用。

钦娅芬 发表于 2025-12-16 22:45:53

感谢分享

宗和玉 发表于 2025-12-21 06:06:36

热心回复!

汲佩杉 发表于 2025-12-23 18:17:31

感谢分享,下载保存了,貌似很强大

溶绚 发表于 2025-12-30 01:29:28

谢谢分享,辛苦了

俏挺喳 发表于 2025-12-30 04:42:55

谢谢分享,辛苦了

搁胱 发表于 2026-1-2 15:13:59

感谢分享,下载保存了,貌似很强大

腥狩频 发表于 2026-1-17 20:15:51

过来提前占个楼

县挫伪 发表于 2026-1-18 17:42:18

这个有用。

荆邦 发表于 2026-1-20 23:38:53

感谢发布原创作品,程序园因你更精彩

庾芷秋 发表于 2026-1-22 00:12:01

前排留名,哈哈哈

沦嘻亟 发表于 2026-1-22 10:56:16

过来提前占个楼

度阡舅 发表于 2026-1-22 12:59:21

这个好,看起来很实用

站竣凰 发表于 2026-1-25 12:17:18

喜欢鼓捣这些软件,现在用得少,谢谢分享!
页: [1] 2
查看完整版本: 模拟实现 memset --浅谈C语言