memset和_strnset

时间:2015-09-18 21:46:45

标签: c++ c memset

我无法弄清楚以下两个实现之间究竟有什么区别:

char str[20] = "Hello World";
_strnset(str, '*', 5); 

char str[20] = "Hello World";
memset(str, '*', 5);

他们都产生以下结果:

输出:*****世界!

他们之间有偏好吗?

1 个答案:

答案 0 :(得分:11)

_strnset知道它正在使用字符串,因此会尊重null终止符。 memset没有,所以不会。

至于偏好,

  • memset符合C和C ++标准,_strnset两者都没有。
  • 如果可用,_strnset可以在您编写有缺陷的代码时避免缓冲区溢出。

如果您知道自己将继续使用Windows,请使用_strnset。其他memset