snprintf linux 与 windows下差异
来源:互联网 发布:sql查询去除重复字段 编辑:程序博客网 时间:2024/05/16 01:55
一次移植,将windows下的某个程序移植到linux下,在运行测试阶段,发现存在部分字符丢失的问题,
查找原因,发现原来windows下的_snprintf与linux下的snprintf 存在一定的差异。
linux下 sprintf会自动在后面加'/0',同时copy的长度也包含了‘/0’;
snprintf的man中有如下解释:
The functions snprintf() and vsnprintf() do not write more than size bytes (including the
trailing '/0').
但windows下的_snprintf并未按照该规则,就是简单的copy指定长度的字符,不自动加0,并且长度也不包含0。
试验代码如下:
#include <stdio.h>
#include <string.h>
int main()
{
char buf[20];
char *pstr = "this is a test string";
memset(buf, 0, sizeof(buf));
_snprintf(buf, sizeof(buf)-1, "%s", pstr);
printf("buf = %s, strlen(buf) = %d/n", buf, strlen(buf));
return 0;
}
windows下的结果为 :
buf = this is a test stri, strlen(buf) = 19
linux下的结果为:(_snprintf 替换为 snprintf)
buf = this is a test str, strlen(buf) = 18
平台间函数的微妙差异必然很容易导致问题的发生,防不胜防啊。。。。
- snprintf linux 与 windows下差异
- snprintf linux 与 windows下差异
- snprintf函数使用(Windows与Linux版本)
- snprintf函数使用(Windows与Linux版本)
- snprintf函数使用(Windows与Linux版本)
- snprintf函数使用(Windows与Linux版本)
- snprintf函数使用(Windows与Linux版本)
- windows 下使用 snprintf
- Linux与windows下setsockopt的一点差异
- linux下和windows 下 snprintf函数的区别
- windows与linux 汇编差异
- Linux下的snprintf
- Linux and Windows snprintf区别
- Linux and Windows snprintf区别
- Linux and Windows snprintf区别
- Windows与Linux编译器的差异
- Windows与Linux编译器的差异
- Linux与Windows系统的差异
- 远程桌面
- SQL2005安装问题 性能监视器计数器要求 (错误) 及超强解决办法
- 如何在C#中实现DATAGRIDVIEW 数据打印
- struts2中的XXX.action与XXX
- 游戏服务器架构(二)
- snprintf linux 与 windows下差异
- mschart示例(转自VCBASK)
- javascript中的关键字this理解
- 最热瘦身食谱人气榜Top5
- 人生必知五句话
- 为了健康你应该认真穿内衣
- Android 技术专题系列之十 -- Audio manager
- Android 技术专题系列之十一 -- DRM
- 字符全半角转换