memset 手册说明:int 类型还是常量字节? [复制]
Posted
技术标签:
【中文标题】memset 手册说明:int 类型还是常量字节? [复制]【英文标题】:memset manual description: int type or constant byte? [duplicate] 【发布时间】:2019-05-03 08:38:14 【问题描述】:我对@987654322@ 及其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
,它总是有sizeof
的1
,因此对应一个字节?
然后,memset 在边界情况下的“真实”行为是什么(未定义?)?
所谓边界情况,我的意思是例如sizeof(int) = 4
和n=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 类型还是常量字节? [复制]的主要内容,如果未能解决你的问题,请参考以下文章