memset 手册说明:int 类型还是常量字节? [复制]

Posted

技术标签:

【中文标题】memset 手册说明:int 类型还是常量字节? [复制]【英文标题】:memset manual description: int type or constant byte? [duplicate] 【发布时间】:2019-05-03 08:38:14 【问题描述】:

我对@9​​87654322@ 及其manual's entry 有疑问。这是我在 memset 的手册中看到的内容:

   void *memset(void *s, int c, size_t n);

[...]

描述

memset() 函数填充内存区域的前 n 个字节 由 s 用常量字节 c 指向。

[...]

手册上说with the constant byte c,但c 是一个整数,其大小实际上取决于几个因素(编译器、架构...)。 一般情况下,sizeof(int) > 1(通常是4)。

我的问题是:为什么c 不是char,它总是有sizeof1,因此对应一个字节? 然后,memset 在边界情况下的“真实”行为是什么(未定义?)? 所谓边界情况,我的意思是例如sizeof(int) = 4n=7 的情况。

【问题讨论】:

【参考方案1】:

标准有更好的措辞。

引用C11,第 7.24.6.1 章,

memset 函数将c 的值(转换为unsigned char)复制到s 指向的对象的前n 个字符中。

【讨论】:

为什么一开始没有指定为char 我纯粹是在推测,但也许是因为转换为 char 通常比转换为 int 更明确。再次,纯粹是推测。 @taskinoor,如果我没记错的话,作为参数的 char 总是转换为 int,然后作为参数值传递。所以看起来没关系。 知道了 - ***.com/questions/5919735/… @PaulOgilvie 在原型前、标准前的日子里确实如此,我应该认为参数现在指定为 int 出于向后兼容性的原因。

以上是关于memset 手册说明:int 类型还是常量字节? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

JVM命令手册

JVM指令手册

JVM指令手册

关于memset一个易错点

# memset批量赋值

Java字节码