之所以 memset 函数的第二个参数为什么是 int 而不是 char, 只要有以下几个原因:1)为了兼容用字符常量对字符串或是字符数组的初始化(字符常量(如'a')在C语言中被认为成int类型);2)为了照顾已有的比较老的代码(C89标准之前);3)为函数调用,入栈;4)自动类型转换。
这篇博客是在一个好哥们的鼓励下写的。三个要好的朋友,有一个要走,我们为他践行。饭桌上讨论起了技术问题,其中有一个就是关于 memset 函数的第二个参数为什么是 int 而不是 char 。今天我就把我们所讨论的内容记下来(这让我想起了”小虎队“和《一路顺风》)。欢迎高手吐槽。
先给出 memset 的定义,linux-2.6.22.6/lib/string.c
/**
* memset - Fill a region of memory with the given value
* @s: Pointer to the start of the area.
* @c: The byte to fill the area with
* @count: The size of the area.
*
* Do not use memset() to access IO space, use memset_io() instead.
*/
void *memset(void *s, int c, size_t count)
{
char *xs = s;
while (count--)
*xs++ = c;
return s;
}