MSVC的“安全”sprintf
函数有一个模板版本,它“知道”目标缓冲区的大小。然而,这段代码在结束后很高兴地在堆栈上绘制了 567890bytes
...
char bytes[5];
_snprintf_s( bytes, _TRUNCATE, "%s", "1234567890" );
知道我做错了什么,还是这是一个已知的错误?
(我在 VS2005 中工作 - 没有在 2008 年或 2010 年进行测试)
看来确实是Visual C++ 2005 中的一个错误 https://connect.microsoft.com/VisualStudio/feedback/details/99662/templated-vsnprintf-s-and-snprintf-s-buggy(我无法访问该链接;).
我能够在 Visual C++ 2005 中重现该问题。在 Visual C++ 2008 和 2010 中,字符串被正确截断(bytes
包含1234\0
) and -1
按预期返回。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)