memset和_strnset之间的区别

pis*_*obk 6 c c++ memset

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

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.

  • `"Hello World"`有11个字符,加上1个字节表示`'\ 0'.因此,将`_strnset(str,'*',15)`与`memset(str,'*',15)`进行比较. (3认同)