1.1 linux下
char test[4] = {0};
snprintf(test, 4, "%s", "hello");
test的内容将成为 hel0
1.2 windows下
首先,没有snprintf这个函数,使用_snprintf替代吧
char test[4] = {0};
_snprintf(test, 4, "%s", "hello");
但是test的内容却是 hell
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
简单来说,虽然都是“标准库”,但windows遵循的标准跟Linux/Unix遵循的标准不完全一样。Linux/Unix一般遵循POSIX/SUSv3等标准,而windows有自己一套标准,所以需要仔细查看各自平台上的文档说明,区别对待。就你这个代码来说,就很好地体现了两个平台上对类似功能的不同处理:在Linux上,snprintf的行为是“最多复制参数指定的那么多个字节(包括结束的'0')”,而Windows上的_snprintf是不把结束的'0'计算在内的。这些在man/msdn中都有说明