Why does memset take an int as the second argument instead of a char, whereas wmemset takes a wchar_t instea
Probably the same reason why the functions in take ints and not chars.
On most platforms, a char is too small to be pushed on the stack by itself, so one usually pushes the type closest to the machine's word size, i.e. int.
As the link in @Gui13's comment points out, doing that also increases performance.