C语言中itoa系列函数及sprintf系列函数使用详解
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系列函数使用详解相关推荐
- html语言中mouse over,javascript中mouseover、mouseout使用详解
本文并没有像标题说的那样,真正阻止事件元素的子元素冒泡... 只是在子元素冒泡到事件元素处时进行了一个判断,判断是否要触发事件,哦...不对 应该是是否要运行事件函数中的相关操作... 首先你可以猛戳 ...
- html语言中mouse over,javascript中mouseover、mouseout使用详解_javascript技巧-js教程
本文并没有像标题说的那样,真正阻止事件元素的子元素冒泡... 只是在子元素冒泡到事件元素处时进行了一个判断,判断是否要触发事件,哦...不对 应该是是否要运行事件函数中的相关操作... 首先你可以猛戳 ...
- C语言中的getchar()与putchar()详解
getchar() 用于读取用户从键盘输入的单个字符,它有一个整型的返回值,当发生读取错误的时候,返回整型值-1,当读取正确的时候,它会返回用户从键盘输的第一个字符的ASCII码,当程序调用getch ...
- c++语言中break的作用,C++ break和continue用法详解
用于 switch 中的 break 语句也可以放在循环中,当遇到 break 时,循环立即停止,程序跳转到循环后面的语句. 以下是一个带有 break 语句的循环示例.程序段中的 while 循环看 ...
- c语言中at指令的比较,AT指令(中文详解版)(二)
1.常用操作 1.1 AT 命令解释:检测 Module 与串口是否连通,能否接收 AT 命令: 命令格式:AT 命令返回:OK (与串口通信正常) (无返回,与串口通信未连通) 测试结果:AT OK ...
- c语言中math的库函数,C语言中math.h库中的常用函数
C语言中math.h库中的常用函数 int abs(int i) 返回整型参数i的绝对值 double cabs(struct complex znum) 返回复数znum的绝对值 double fa ...
- 【×××系列八】Dynamic Multipoint *** for IPv6 详解
[×××系列八]Dynamic Multipoint *** for IPv6 详解 一.前言 由于涉及IPV6加密,所以根据思科标准此次配置使用思科7200系列高级企业版IOS (详情参考我的上一篇 ...
- 【python教程入门学习】Python函数定义及传参方式详解(4种)
这篇文章主要介绍了Python函数定义及传参方式详解(4种),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 一.函数初识 1.定 ...
- 定时器 槽函数没执行_Web服务器项目详解 07 定时器处理非活动连接(上)
点击"两猿社" 关注我们 Web服务器详解目录 00 项目概述 01 线程同步机制包装类 02 半同步/半反应堆线程池(上) 03 半同步/半反应堆线程池(下) 04 http连接 ...
最新文章
- 服务器技术综述(四)
- sizeof和gcvt转换双精度函数的函数不是小结的小结
- 机器学习:朴素贝叶斯分类器代码实现,决策函数非向量化方式
- 教育|俄罗斯天才少女200万年薪加入华为,22岁拿下世界编程冠军,同天队友也宣布加盟...
- win32开发(对话框启动)
- python文件路径改了需要重新配置环境吗_Django 设置多环境配置文件载入问题
- Jquery取得iframe中元素的几种方法Javascript Jquery获取Iframe的元素、内容或者ID,反之也行!...
- 使用小丸工具箱进行极限视频压缩
- github仓库在线新建文件夹方法备份
- 【深度学习环境搭建<三>】Ubuntu 中Anaconda + Pycharm 开发环境安装
- 大数据分析——暑期黑马《延禧攻略》到底有多火!
- excel提取html字段文字,excel提取字符串中的特定字符串
- element 表格全局筛选(筛选结果请求后端接口)
- 电机的matlab仿真实例,电机控制Matlab仿真模型
- sourcetree下载安装和配置
- 成为一名合格的算法工程师需要掌握哪些技能?
- jquery form表单提交成功,回调方法
- 为什么年终奖是一个彻头彻尾的职场圈套?
- 北邮 操作系统(一)
- 手写一个new操作符