实际上,我认为还有另一个**主要**区别:当缓冲区对于确定的输出来说不够大时,`snprintf`将截断,但`sprintf_s`将调用一个处理程序,默认情况下,该处理程序将引发异常并且(最有可能)终止程序。不幸的是,我无法验证这一点,因为我的电脑有 MSVC(它对 `sprintf_s` 使用不同的定义,并且我无法让任何其他“Godbolt”...
1.ret = snprintf(str, 5, "123456"); 由于size=5,字符串"123456"长度为6(不包括'\0'),所以只截取"1234"放到str,最后加上'\0';ret=6为"123456"长度。2.ret = snprintf(str, 6, "123456"); 同理,此处size=6,还是不能完整的拷贝"123456",只能截取"12345"放到str,最后加上'\0';ret=...