格式化数字字符串详解(sprintf) sprintf 函数是 C 语言中一个强大的格式化数字字符串函数,可以将整数打印到字符串中,控制浮点数打印格式,连接字符串,等等。 格式化数字字符串 sprintf 函数最常见的应用之一是将整数打印到字符串中。例如: ```c sprintf(s, "%d", 123); // 产生 "123" ``` 可以指定宽度,不足的左边补空格: ```c sprintf(s, "%8d%8d", 123, 4567); // 产生:" 123 4567" ``` 也可以左对齐: ```c sprintf(s, "%-8d%8d", 123, 4567); // 产生:"123 4567" ``` 还可以按照 16 进制打印: ```c sprintf(s, "%8x", 4567); // 小写 16 进制,宽度占 8 个位置,右对齐 sprintf(s, "%-8X", 4568); // 大写 16 进制,宽度占 8 个位置,左对齐 ``` 如果我们想打印 16 进制内容时,通常想要一种左边补 0 的等宽格式,那该怎么做呢?很简单,在表示宽度的数字前面加个 0 就可以了: ```c sprintf(s, "%08X", 4567); // 产生:"000011D7" ``` 浮点数打印格式 浮点数的打印和格式控制是 sprintf 的又一大常用功能,浮点数使用格式符”%f”控制,默认保留小数点后 6 位数字。例如: ```c sprintf(s, "%f", 3.1415926); // 产生 "3.141593" ``` 但有时我们希望自己控制打印的宽度和小数位数,這时就应该使用:”%m.nf”格式,其中 m 表示打印的宽度,n 表示小数点后的位数。例如: ```c sprintf(s, "%10.3f", 3.1415626); // 产生:" 3.142" sprintf(s, "%-10.3f", 3.1415626); // 产生:"3.142 " sprintf(s, "%.3f", 3.1415626); // 不指定总宽度,产生:"3.142" ``` 符号扩展问题 在使用 sprintf 函数时,有一个符号扩展的问题。例如: ```c short si = -1; sprintf(s, "%04X", si); // 产生“FFFFFFFF” ``` 这是因为 sprintf 是个变参函数,除了前面两个参数之外,后面的参数都不是类型安全的,函数更没有办法仅仅通过一个“%X”就能得知当初函数调用前参数压栈时被压进来的到底是个 4 字节的整数还是个 2 字节的短整数。解决方法是让编译器做 0 扩展,而不是符号扩展: ```c sprintf(s, "%04X", (unsigned short)si); ``` 或者: ```c unsigned short si = -1; sprintf(s, "%04X", si); ``` 8 进制打印 sprintf 和 printf 还可以按 8 进制打印整数字符串,使用”%o”: ```c sprintf(s, "%o", 123); // 产生 "173" ``` 结论 sprintf 函数是一个非常有用的函数,能够将整数打印到字符串中,控制浮点数打印格式,连接字符串,等等。但是,在使用 sprintf 函数时,需要注意符号扩展问题,避免出现不正确的结果。















剩余6页未读,继续阅读

- xiaobao9292013-05-13只能说是有一些帮助,不是很全面

- 粉丝: 1
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 工程的项目管理系统解决方案设计.doc
- 自动喷泉PLC-控制系统.doc
- 校园无线网络技术及应用发展(英文版).pptx
- 综合实践活动课《网络的利与弊》分析PPT课件.ppt
- LED显示屏控制软件操作手册Wifi精简版.doc
- 项目管理文档规格表样本.doc
- 计算机技术系请假条存根.doc
- 完美版课件单片机原理与接口技术复习重点.ppt
- 基于JEE的猪肉质量安全可追溯网络化系统研究基于We.pptx
- 企业大数据架构图网络拓扑.pptx
- 极限运算法则07278.pptx
- 银行ATM机无线网络组网解决方案.doc
- 弱电工程师培训资料-第三章-分类设计要求-7机房-综合布线系统的电气防护原则.doc
- 动漫网站策划书.doc
- 互联网环境下内部审计的华丽转身[会计实务优质文档].doc
- 网络系统施工报告.doc


