1 问题描述(snprintf为例)
1.1 linux下
char test[4] = {0};
snprintf(test, 4, "%s", "hello");
test的内容将成为 hel\0
1.2 windows下
首先,没有snprintf这个函数,使用_snprintf替代吧
char test[4] = {0};
_snprintf(test, 4, "%s", "hello");
但是test的内容却是 hell
2 问题
于是就不太明白了
stdio.h不是c语言的标准输入输出库吗?为什么还和平台有关呢,或者说其实和编译器有关?
除了snprintf还有其他函数不同吗?
写过跨平台的大牛们,是如何解决这个问题的?
简单来说,虽然都是“标准库”,但windows遵循的标准跟Linux/Unix遵循的标准不完全一样。Linux/Unix一般遵循POSIX/SUSv3等标准,而windows有自己一套标准,所以需要仔细查看各自平台上的文档说明,区别对待。就你这个代码来说,就很好地体现了两个平台上对类似功能的不同处理:在Linux上,snprintf的行为是“最多复制参数指定的那么多个字节(包括结束的'\0')”,而Windows上的_snprintf是不把结束的'\0'计算在内的。这些在man/msdn中都有说明。