我无法弄清楚以下两个实现之间究竟有什么区别:
char str[20] = "Hello World";
_strnset(str, '*', 5);
Run Code Online (Sandbox Code Playgroud)
和
char str[20] = "Hello World";
memset(str, '*', 5);
Run Code Online (Sandbox Code Playgroud)
它们都产生以下结果:
输出:*****世界!
他们之间有偏好吗?
Ada*_*dam 11
_strnset知道它正在使用字符串,所以将尊重null终止符.memset没有,所以不会.
至于偏好,
memset在C和C++标准_strnset中都没有._strnset如果您编写错误的代码,可以避免缓冲区溢出.如果您知道自己将继续使用Windows,请使用_strnset.否则memset.