u32 iterations = 5;
u32* ecx = (u32*)malloc(sizeof(u32) * iterations);
memset(ecx, 0xBAADF00D, sizeof(u32) * iterations);
printf("%.8X\n", ecx[0]);
ecx[0] = 0xBAADF00D;
printf("%.8X\n", ecx[0]);
free(ecx);
非常简单地说,为什么我的输出结果是以下内容?
0D0D0D0D
BAADF00D
提示:
u32是unsigned int的简单typedef编辑:
- 使用gcc 4.3.4编译
- 已包含string.h头文件
stosb
汇编命令来快速设置字节,这很愚蠢,因为它不支持stosw
(字)和stosd
(双字)。 - Nick Dandoulakismemset
函数之所以要接收一个int
类型的参数,尽管它实际上需要的是一个unsigned char
类型的参数,是因为它的历史可以追溯到ANSI C标准出现之前的时期,当时还没有函数原型。在没有函数原型的情况下调用函数时,参数会被扩展为int
或unsigned int
类型,所以为了让ANSI C标准下的函数原型与旧的非函数原型定义兼容,就必须使用int
类型作为参数。 - caf