memset克隆产生奇怪的结果

时间:2013-08-09 18:19:55

标签: c

我正在尝试复制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

1 个答案:

答案 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