C语言中itoa系列函数及sprintf系列函数使用详解

itoa函数系列

该系列函数是广泛使用的非标准C语言和C++语言扩展功能,只能在windows编译器下使用,如果涉及到跨平台是不允许使用的,这个时候就需要采用sprintf系列,这时候该有人说为什么不直接使用sprintf系列呢?自然itoa函数也有其优点所在即运行速度较前者要快,所以如果没有涉及跨平台的开发使用itoa系列是非常好的选择。其C语言库是**<stdlib.h>,C++语言库是<cstdlib.h>**。
itoa:将整型值转换为字符串。(integer to ascii )(反向函数是atoi)
char *itoa (int value, char *str, int base );
返回值:返回指向str的指针,无错误返回。
int value 被转换的整数,char *string 转换后储存的字符数组, int radix 转换进制数,如2,8,10,16 进制等,大小应在2-36之间。
eg:itoa(number, string,10); 将num以10进制方式转换为串str,如当num=59时,则str=‘59’。

● ltoa:将长整型值转换为字符串。(反向函数是atol)
char *ltoa(long value,char *string,int radix),详细用法同上,只是传入参数的数据类型有变动。

● ultoa:将无符号长整型值转换为字符串。
char *ultoa(unsigned long value,char *string,int radix),详细用法同上,只是传入参数的数据类型有变动。

● gcvt:将浮点型数转换为字符串,取四舍五入。(反向函数是atof/strtol)
char *gcvt(double number,size_t ndigits,char *buf)
gcvt()用来将参数number转换成ASCII码字符串,参数ndigits表示显示的位数(不包括小数点和正负号)。gcvt()与ecvt()和fcvt()不同的地 方在于,gcvt()所转换后的字符串包含小数点或正负符号。若转换成功,转换后的字符串会放在参数buf指针所指的空间。

● ecvt:将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点。
char *Ecvt(double value, int ndigit, int *decpt, int *sign);
不同于gcvt其只有数字才存储在该字符串中,小数点位置和value符号在调用之后从decpt和sign获取。decpt参数指出给出小数点位置的整数值, 它是从该字符串的开头位置计算的。0或负数指出小数点在第一个数字的左边。sign参数指出一个指出转换的数的符号的整数。如果该整数为0,这个数为正数,否则为负数。

● fcvt:指定位数为转换精度,其余同ecvt()。

sprintf函数系列

头文件: <stdio.h>
str – 目标字符串。
size – 拷贝字节数(Bytes)。
format – 格式化成字符串。
… – 可变参数。

- sprintf
int sprintf(char *string, char *format [,argument,…]);sprintf 是个变参函数,使用sprintf 对于写入buffer的字符数是没有限制的,,结束字符‘\0’不会自动添加,这就存在了buffer溢出的可能性。解决这个问题,可以考虑使用 snprintf函数,该函数可对写入字符数做出限制。
格式化输出字符:
%% 印出百分比符号,不转换。
%c 字符输出到缓冲区,不转换。
%d 整数转成十进位。
%f 倍精确度数字转成浮点数。
%o 整数转成八进位。
%s 字符串输出到缓冲区,不转换。
%x 整数转成小写十六进位。
%X 整数转成大写十六进位
eg:sprintf(s, “%4d%4d”, 123, 4567);

- snprintf
int snprintf(char *str, size_t size, const char *format, …);snprintf 是个变参函数。不同于sprintf在于避免溢出操作如下,所以在实际开发中应尽量避免使用sprintf函数。
(1) 如果格式化后的字符串长度小于等于 size,则会把字符串全部复制到 str 中,并给其后添加一个字符串结束符 \0;
(2) 如果格式化后的字符串长度大于 size,超过 size 的部分会被截断,只将其中的 (size-1) 个字符复制到 str 中,并给其后添加一个字符串结束符 \0,返回值为欲写入的字符串长度scnprint返回的是已经被写入到buf的字符数
eg:iRelLen = snprintf (buffer1, 10, “%d”, “1234567890”);
这里的iRelLen值为11,该字符串被截断了,此时的strlen(buffer)是9,结果为”123456789“

- scnprintf
scnprintf()和snprintf()都不会越界,而且都会在最后面加一个结束符’\0’,返回值的大小都不包含最后的结束符,都会截断,不同之处是:scnprintf()和vscnprintf()返回的是写入到buf的字符数,而snprintf()和vsnprintf()返回的是格式化之后得到字符的长度(可能比size要大) 。一般在编译驱动或者内核程序时,编译器都会提出警告use scnprintf() instead of snprintf()以防止内存越界。
eg:iRelLen = scnprintf (buffer1, 10, “%d”, “1234567890”);
这里的iRelLen值为9,该字符串被截断了,此时的strlen(buffer)是9,结果为”123456789“,较snprintf函数返回值不同,所以常用scnprintf函数

C语言中itoa系列函数及sprintf系列函数使用详解相关推荐

  1. html语言中mouse over,javascript中mouseover、mouseout使用详解

    本文并没有像标题说的那样,真正阻止事件元素的子元素冒泡... 只是在子元素冒泡到事件元素处时进行了一个判断,判断是否要触发事件,哦...不对 应该是是否要运行事件函数中的相关操作... 首先你可以猛戳 ...

  2. html语言中mouse over,javascript中mouseover、mouseout使用详解_javascript技巧-js教程

    本文并没有像标题说的那样,真正阻止事件元素的子元素冒泡... 只是在子元素冒泡到事件元素处时进行了一个判断,判断是否要触发事件,哦...不对 应该是是否要运行事件函数中的相关操作... 首先你可以猛戳 ...

  3. C语言中的getchar()与putchar()详解

    getchar() 用于读取用户从键盘输入的单个字符,它有一个整型的返回值,当发生读取错误的时候,返回整型值-1,当读取正确的时候,它会返回用户从键盘输的第一个字符的ASCII码,当程序调用getch ...

  4. c++语言中break的作用,C++ break和continue用法详解

    用于 switch 中的 break 语句也可以放在循环中,当遇到 break 时,循环立即停止,程序跳转到循环后面的语句. 以下是一个带有 break 语句的循环示例.程序段中的 while 循环看 ...

  5. c语言中at指令的比较,AT指令(中文详解版)(二)

    1.常用操作 1.1 AT 命令解释:检测 Module 与串口是否连通,能否接收 AT 命令: 命令格式:AT 命令返回:OK (与串口通信正常) (无返回,与串口通信未连通) 测试结果:AT OK ...

  6. c语言中math的库函数,C语言中math.h库中的常用函数

    C语言中math.h库中的常用函数 int abs(int i) 返回整型参数i的绝对值 double cabs(struct complex znum) 返回复数znum的绝对值 double fa ...

  7. 【×××系列八】Dynamic Multipoint *** for IPv6 详解

    [×××系列八]Dynamic Multipoint *** for IPv6 详解 一.前言 由于涉及IPV6加密,所以根据思科标准此次配置使用思科7200系列高级企业版IOS (详情参考我的上一篇 ...

  8. 【python教程入门学习】Python函数定义及传参方式详解(4种)

    这篇文章主要介绍了Python函数定义及传参方式详解(4种),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 一.函数初识 1.定 ...

  9. 定时器 槽函数没执行_Web服务器项目详解 07 定时器处理非活动连接(上)

    点击"两猿社" 关注我们 Web服务器详解目录 00 项目概述 01 线程同步机制包装类 02 半同步/半反应堆线程池(上) 03 半同步/半反应堆线程池(下) 04 http连接 ...

最新文章

  1. 服务器技术综述(四)
  2. sizeof和gcvt转换双精度函数的函数不是小结的小结
  3. 机器学习:朴素贝叶斯分类器代码实现,决策函数非向量化方式
  4. 教育|俄罗斯天才少女200万年薪加入华为,22岁拿下世界编程冠军,同天队友也宣布加盟...
  5. win32开发(对话框启动)
  6. python文件路径改了需要重新配置环境吗_Django 设置多环境配置文件载入问题
  7. Jquery取得iframe中元素的几种方法Javascript Jquery获取Iframe的元素、内容或者ID,反之也行!...
  8. 使用小丸工具箱进行极限视频压缩
  9. github仓库在线新建文件夹方法备份
  10. 【深度学习环境搭建<三>】Ubuntu 中Anaconda + Pycharm 开发环境安装
  11. 大数据分析——暑期黑马《延禧攻略》到底有多火!
  12. excel提取html字段文字,excel提取字符串中的特定字符串
  13. element 表格全局筛选(筛选结果请求后端接口)
  14. 电机的matlab仿真实例,电机控制Matlab仿真模型
  15. sourcetree下载安装和配置
  16. 成为一名合格的算法工程师需要掌握哪些技能?
  17. jquery form表单提交成功,回调方法
  18. 为什么年终奖是一个彻头彻尾的职场圈套?
  19. 北邮 操作系统(一)
  20. 手写一个new操作符

热门文章

  1. 转行历程|用一年时间写一份简历,成功跳槽
  2. 基于MobileNet-v3和YOLOv5的餐饮有害虫鼠识别及防治系统的设计与实现
  3. Impala动态分区插入数据慢
  4. 手机怎么修改照片kb大小?一分钟解决
  5. echarts漏斗图自定义漏斗颜色、粗细、大小、间隔缝隙
  6. 一道很烧脑的面试题?在Android中能否用CPU代替GPU?
  7. 人脸识别+移动考勤,这个组合很厉害
  8. 从前慢-HTML基础
  9. Excel多条件筛选求和
  10. 华南理工计算机应用随堂作业答案,华南理工大学计算机应用基础随堂练习题目及答案...