【问题标题】:memset manual description: int type or constant byte? [duplicate]memset 手册说明:int 类型还是常量字节? [复制]
【发布时间】: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 的情况。

【问题讨论】:

    标签: c types memset manual


    【解决方案1】:

    标准有更好的措辞。

    引用C11,第 7.24.6.1 章,

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

    【讨论】:

    • 为什么一开始没有指定为char
    • 我纯粹是在推测,但也许是因为转换为 char 通常比转换为 int 更明确。再次,纯粹是推测。
    • @taskinoor,如果我没记错的话,作为参数的 char 总是转换为 int,然后作为参数值传递。所以看起来没关系。
    • @PaulOgilvie 在原型前、标准前的日子里确实如此,我应该认为参数现在指定为 int 出于向后兼容性的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 2015-05-02
    • 1970-01-01
    相关资源
    最近更新 更多