我正在尝试复制memset功能。由于我不理解的原因,以下代码不起作用并产生奇怪的结果:
#include <sys/types.h>
void *mem_set(void *dst, int c, size_t n)
{
char *d;
size_t i;
d = dst;
for (i = 0; i < n; i++)
d[i] = (unsigned char) c;
return dst;
}
以下是测试:
int *a;
a = malloc(4 * sizeof(int));
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
printf("%d %d %d %d\n", a[0], a[1], a[2], a[3]);
mem_set(a, 1, 4);
printf("%d %d %d %d\n", a[0], a[1], a[2], a[3]);
free(a);
这里输出:
1 2 3 4
16843009 2 3 4
答案 0 :(得分:2)
您的memset
没问题。只是你没有正确使用它(或者不理解当应用于int
数组时它应该做什么。)
要填充整个数组,
mem_set(a, 1, 4);
应该阅读
mem_set(a, 1, 4 * sizeof(int));
输出应该变为16843009 16843009 16843009 16843009
(即0x01010101
重复四次[1])。如果您希望输出为1 1 1 1
,则memset
不适合该作业。
[1]为了论证,假设sizeof(int)==4
。