1

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

1 回答 1

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.

于 2013-08-09T18:25:58.550 回答