sprintf的使用
这几天总遇到sprintf,下面自己来小小地总结下~
srpintf()函数的功能非常强大:效率比一些字符串操作函数要高;而且更具灵活性;可以将想要的结果输出到指定的字符串中,也可作为缓冲区,而printf只能输出到命令行上~
头文件:stdio.h
函数功能:格式化字符串,将格式化的数据写入字符串中。
函数原型:int sprintf(char *buffer, const char *format, [argument]…)
参数:
(1)buffer:是char类型的指针,指向写入的字符串指针;
(2)format:格式化字符串,即在程序中想要的格式;
(3)argument:可选参数,可以为任意类型的数据;
函数返回值:buffer指向的字符串的长度;
用处:
(1)格式化数字字符串:在这点上sprintf和printf的用法一样,只是打印到的位置不同而已,前者打印给buffer字符串,后者打印给标准输出,所以sprintf也可以用来将整型转化为字符串,比itoa效率高且如此地简便~比如:sprintf(buffer, “%d”, 123456);执行后buffer即指向字符串“123456”~
(2)连接字符:
下面通过两个例子来说明这个问题:
(a)连接以’\0’结束的字符串:
#include<stdio.h>
int main()
{char buffer[10];char *a = "1234";char *b = "5678";sprintf(buffer, "%s%s", a, b);printf("%s\n", buffer);return 0;
}
运行结果:
(b)连接结尾没有’\0’的字符数组或字符串缓冲区:
#include<stdio.h>
int main()
{char a[] = {'1', '2', '3', '4'};char b[] = {'5', '6', '7', '8'};char buffer[10];sprintf(buffer, "%.4s%.4s", a, b);printf("%s\n", buffer);return 0;
}
运行结果:
如果第二种情况的程序中,sprintf的format部分为"%4s%4s"或"%s%s",运行结果均为:
很莫名其妙吧~
(c)如果我们想动态获取要处理的字符缓冲区长度,则将上面sprintf改为:sprintf(buffer, "%.*s%.*s", sizeof(a), a, sizeof(b), b);
即可~
(3)利用sprintf中的返回值:在”AOV网络和拓扑(二)——实现“篇中,有这样一行程序:pos += sprintf(output+pos, "%d ", j+1); 它的作用是什么呢?
因为sprintf函数的返回值为output+pos所指向字符串的长度,所以对于pos来说,相当于执行了一次pos+=sizeof(output+pos),如果这条语句放在一个循环里,则第二次执行sprintf时output+pos随即指向了当前缓冲区的末尾(注意不是output的末尾!否则会读取非法内存!),这样就可以生成一个具有一定规则的字符串了~写个例子:
#include<stdio.h>
int main()
{char buf[100];int pos = 0;for(int j = 0; j < 10; j++)pos += sprintf(buf+pos, "%d-", j);buf[pos-1] = '\n';//将最后一个字符'-'转换为'\n'printf(buf);return 0;
}
运行结果:
pos每次增加2,因为每次buf字符串后面都要加上两个字符j和‘-’。
sprintf的使用相关推荐
- sprintf 和strcpy 的差别
sprintf据说是printf的孪生兄弟,在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望. sprintf 跟printf 在用法差不多,只是打印的目的地不同而已,前者打 ...
- Go 学习笔记(46)— Go 标准库之 fmt(输入/输出格式化参数、Printf/Fprintf/Sprintf区别、Println/Fprintln/Sprintln 区别)
1. 概述 import "fmt" fmt 包实现了类似 C 语言 printf 和 scanf 的格式化 I/O .格式化动作( verb )源自 C 语言但更简单. 2. P ...
- sprintf函数做什么用?
sprintf函数原型为 int sprintf(char *str, const char *format, ...).作用是格式化字符串,具体功能如下所示: (1)将数字变量转换为字符串. (2) ...
- 利用标准库sprintf、sscanf函数实现字符串和数字的转换
一.sprintf() 用于将数字转化为字符串 1.将整数转化为字符串 #include<iostream> using namespace std;int main() {char st ...
- PHP函数printf()、sprintf()的用法
printf()函数优点在于可以格式化输出 格式: %['padding_character][-][width][.precision]type 所有的转换说明都是以%开始,如果想打印一个%符号,必 ...
- fprintf、printf、sprintf、fscanf、scanf、sscanf 格式化输入输出
格式化输入输出 1. fprintf(格式化输出数据至文件) 相关函数 printf,fscanf,vfprintf 表头文件 #include<stdio.h> 定义 ...
- C++程序中常用的sprintf
C++Sprintf sprintf(scoreArr, "%d", my_score); 首先看上面这行代码,sprintf 跟printf 在用法上几乎一样,只是打印的目的地不 ...
- 汇总|C++常见知识点总结,涉及文本输出、排序、生成随机数、异常处理、关联容器、printf重定向、sprintf用法、cout重定向
文章目录 一 将程序运行结果输出到txt文本文件中 二 排序算法 三 生成随机数 四 异常处理 六 关于GitHub上zip与tar.gz的区别 七 容器中查找最大值所在的位置 八 C++中关联容器的 ...
- C语言中positive用法,sprintf - C语言库函数
C库类 的 sprintf - C语言库函数 C库函数int sprintf(char *str, const char *format, ...)发送str 指向一个字符串的格式化输出. 声明 以下 ...
- python scapy 函数_【python|scapy】sprintf输出时raw_string转string
最近在有python的scapy模块分析TCP报文,一直有一个关于转义字符的问题困惑着我,查找的很多资料后仍然百思不得其解,请大神指教. 请看代码: from scapy.all import * d ...
最新文章
- 有关RDS上只读实例延时分析-同适用于自建MySQL主从延时分析判断
- 2018AI和机器学习界的12个重大收购案
- NVL 和NVL2函数
- MySQL之一致性检测及数据同步
- UA MATH564 概率论VI 数理统计基础2 多元正态分布
- C++ 中 vector 的作用:
- loadrunner脚本设计:检查点(断言)及web_submit_data函数使用示例
- 汇编语言——输入两位数比较大小
- 1067 Sort with Swap(0, i) (25 分)思路
- 软件推荐┊最有效防止被聚生网管、P2P终结者等管理软件控制的小工具——ARP防火墙单机版
- 开发文档chm文件打不开
- 数据挖掘—Apriori算法
- 基于android终端的物联网医药物流管理系统设计公司,基于Android终端的物联网物流管理系统的设计与实现.pdf...
- 在线考试系统html源码,jQuery在线答题考试系统代码
- html 链接excel表格,excel表格超链接设置
- 【沉浸式腾讯云服务器部署安装docker】
- SwiftUI基础——创建并组合视图
- 从0到1一个文件,用Python 实现 Web 框架
- exlc表格怎么换行_excel表格中如何换行_excel表格内打字如何换行
- GUC-9 ReadWriteLock : 读写锁