gpt4 book ai didi

c - memset 克隆产生奇怪的结果

转载 作者:太空宇宙 更新时间:2023-11-04 02:55:25 25 4
gpt4 key购买 nike

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

最佳答案

您的 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

关于c - memset 克隆产生奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18153150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com