xto*_*ofl 22 c++ visual-studio-2005 visual-c++ visual-c++-2005
MSVC的"安全" sprintf功能具有"知道"目标缓冲区大小的模板版本.但是,这段代码在结束后很快就在堆栈中绘制了567890 bytes...
char bytes[5];
_snprintf_s( bytes, _TRUNCATE, "%s", "1234567890" );
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么,或者这是一个已知的错误?
(我在VS2005工作 - 没有在2008年或2010年测试)
Jam*_*lis 21
它似乎确实是Visual C++ 2005中的一个错误(我无法访问该链接; Google也将其缓存).
我能够在Visual C++ 2005中重现该问题.在Visual C++ 2008和2010中,字符串被正确截断(bytes包含1234\0)并按-1预期返回.