题目

实现简易 memset 填充字节

思路

本题模拟 memset:把连续 n 个字节都设为同一值。

按字节写 *p++ = (unsigned char)val,共 n 次;只取 val 的低 8 位。

解题分析

memset 按字节写同一值,填充 int 数组会把每个字节都设为 val,通常用 0 清零。设非 0 _pattern 时 int 结果可能不是每个元素等于 val。

完整程序

#include <stdio.h>
#include <stddef.h>

static void my_memset(void *p, int val, size_t n)
{
    unsigned char *q = p;
    while (n--) {
        *q++ = (unsigned char)val;
    }
}

int main(void)
{
    int a[5] = {1, 2, 3, 4, 5};
    my_memset(a, 0, sizeof a);
    for (int i = 0; i < 5; i++) {
        printf("%d%c", a[i], i + 1 < 5 ? ' ' : '\n');
    }
    return 0;
}

运行示例

程序不需要从键盘读入,直接运行。输出如下:

0 0 0 0 0