题目
实现简易 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