snprintf/_snprintf 在不同平台间函数差异

原文是以MSDN的文档介绍为主。而且还是之前的版本。不知新版本有没有改变,一会儿安装好了VS2013 Express试试看。
这个函数最主要的问题是C标准中没有定义,是各个厂家自己提供的,gcc提供的就是snprintf,ms提供的是加了前下划线的版本。因而对于函数的行为没有标准的定义,存在实现上的差别。主要表现在返回值和输出缓冲区的行为上。
gcc的版本会在源字符串长度>=size的情况下,对目标字符串的结尾自动添加“\0”,返回值为源字符串长度;
ms的版本会在源字符串长度>=size的情况下,不会对目标字符串的结尾自动添加“\0”,返回值在超过size情况下返回负值;
相比之下,gcc的版本较为安全。
看来没有标准定义的东西要少用,指不定就被坑了,也说不定哪天C标准委员会把snprintf纳入标准中,这样其中一家的实现肯定得改了。

时间: 2024-08-01 00:47:11

snprintf/_snprintf 在不同平台间函数差异的相关文章

More Effective C++----(12)理解"抛出一个异常"与"传递一个参数"或"调用一个虚函数"间的差异

Item M12:理解"抛出一个异常"与"传递一个参数"或"调用一个虚函数"间的差异 从语法上看,在函数里声明参数与在catch子句中声明参数几乎没有什么差别: class Widget { ... }; //一个类,具体是什么类 // 在这里并不重要 void f1(Widget w); // 一些函数,其参数分别为 void f2(Widget& w); // Widget, Widget&,或 void f3(const W

python 小程序 比较目录间的差异

比较目录间的差异: I 只按照名称做了比较,如果目录的文件名称相同,但是内容不同脚本认为为相同文件 II 针对目录下面的目录没有循环比较,只是比较了目录的名称 import sys, os def difference(seq1, seq2): """ 返回仅在seq1中的项 """ return [item for item in seq1 if item not in seq2] def reportdiff(unique1, unique2

移动支付平台间接口报文解析技术核心架构实现、及平台交易处理项目全程实录教程

<基于移动支付平台间接口报文解析技术核心架构实现.及平台交易处理项目全程实录>课程讲师:MoMo 课程分类:Java框架适合人群:中级课时数量:52课时用到技术:JavaBean .Spring3.X. SpringMVC. Hibernate3.X.Apache HttpClient 3.x.JUnit4.x.自定义Annotation + java反射技术涉及项目:移动支付平台间接口咨询QQ:1337192913 课程介绍:   本课程抛开理论.以项目为驱动,适用于初次接触报文收发.组装解

移动支付平台间接口报文解析核心架构及平台交易全程实录

移动支付平台间接口报文解析核心架构及平台交易全程实录 (HttpClient+SpringMVC+Spring3+Hibernate3+自定义Annotation) 课程分类:Java框架 适合人群:中级 课时数量:52课时 用到技术:JavaBean .Spring3.X. SpringMVC. Hibernate3.X.Apache HttpClient 3.x.JUnit4.x.自定义Annotation + java反射技术 涉及项目:移动支付平台间接口 咨询qq:1840215592

.Net4.6 Task 异步OA现金盘平台出租函数 比 同步函数 慢5倍 踩坑经历

异步Task简单介绍本标题有点 哗众取宠OA现金盘平台出租QQ2952777280[话仙源码论坛]hxforum.com[木瓜源码论坛]papayabbs.com ,各位都别介意(不排除个人技术能力问题) -- 接下来:我将会用一个小Demo 把 本文思想阐述清楚. .Net 4.0 就有了 Task 函数 -- 异步编程模型 .Net 4.6 给 Task 增加了好几个 特别实用的方法,而且引入了 await async 语法糖 当然,这是非常不错的技术,奈何我有自己的线程队列封装,也就没有着

jmeter-时间函数偏移

做个文明人 大家一定都知道,jmeter有个时间函数,话不多少,上图. 怎么用呢,很简单,第一行,时间格式,yyyy-MM-dd,yyyy/MM/dd-HHmmss,第二行参数名称,now 恭喜,你可以取到当前的时间了 咦,我要取明天的时间怎么办呢,在后面+1?貌似不行. 实在不行,可以直接设参数嘛. 可是我这脚本丢到服务器上,总不能每天都改一下吧. 小伙子有想法,那咱给整点干货吧 前置处理器:beanshell preprocessor.咱们来构造两个参数(分别是orderDate,sende

快速开发平台CreateObject函数的用法

在平台开发中,常常会使用到加载一些外部的dll或者调用一些方法,那么,一般情况下,均可通过LoadAssembly来加载.dim obj= LoadAssembly(程序集名称,要加载的类名) 如下面语句:  dim regex= LoadAssembly("System.dll","System.Text.RegularExpressions.Regex","^[0-9]*$")     '参数是需要验证的字符串,返回结果为该字符串是否符合规则

MySQL学习18:运算符与函数之数值运算符和函数、比较运算符和函数、日期时 间函数

数值运算符和函数 常见的数值函数下面几个: (1)数值运算符 MySQL数据库常见的数值运算符有:+.-.*...%等等.这里我们就不再一一列举,只是来看两个例子: SELECT 3+4; SELECT 3%4; (2)进一取整和舍一取整 SELECT CEIL(3.01); SELECT FLOOR(3.99); (3)整数除法 SELECT 3/4; SELECT 3 DIV 4; (4)取余数(取模) SELECT 5 % 3; SELECT 5 MOD 3; (5)幂运算 SELECT

(转)windows平台时间函数性能比较QueryPerformanceCounter,GetTickCount,ftime,time,GetLocalTime,GetSystemTimeAsFileTime

执行 10000000 次, 耗时 2258,369 微秒     QueryPerformanceCounter 执行 10000000 次, 耗时 26,347 微秒    GetTickCount 执行 10000000 次, 耗时 242,879 微秒     time() c的时间函数 time(time_t) 大概比GetSystemTimeAsFileTime慢6倍,比_ftime 快6倍 执行 10000000 次, 耗时 1310,066 微秒   _ftime 执行 1000