printf %.*s 原来是这样

news2025/2/23 11:02:43

        今天看代码时,看到这样一个printf,以前没见过这样的,也没这样用过,一下子还真不知道是什么意思:

// Response is received. Print it
struct mg_http_message *hm = (struct mg_http_message *) ev_data;
printf("%.*s", (int) hm->message.len, hm->message.ptr);
c->is_closing = 1;         // Tell mongoose to close this connection
*(bool *) fn_data = true;  // Tell event loop to stop

printf("%.*s", (int) hm->message.len, hm->message.ptr); 最常用的就是用 %s 打印字符串了,看到这个懵了。刚好 mongoose 源码有一个类似的函数:

void mg_log(const char *fmt, ...) {
  va_list ap;
  va_start(ap, fmt);
  mg_vxprintf(s_log_func, s_log_func_param, fmt, &ap);
  va_end(ap);
  logc((unsigned char) '\n');
}

主要看 mg_vxprintf() 这个函数的实现,它的用法是这样的:

MG_INFO(("%.*s %.*s %.*s %.*s", (int) hm->method.len, hm->method.ptr,
			(int) hm->uri.len, hm->uri.ptr, (int) tmp.uri.len, tmp.uri.ptr,
			(int) cl->len, cl->ptr));

看完源码后才明白,原来 %.* 是限制长度(精度)的。下面看一个例子:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    double temperature = 20.3456;
    char strTemp[32] = {0};
    snprintf(strTemp, sizeof(strTemp), "%.3f", temperature);
    printf("strTemp = %s\n", strTemp);

    return 0;
}

如果我们需要保留小数点后的几位小数,我们是这样用的:snprintf(strTemp, sizeof(strTemp), "%.3f", temperature); 这里面的 3 就表示保留3位小数点。

输出结果为:20.346,所以同样的 %.*s 中的 * 表示一个参数(int类型),这个参数放在参数列表里,如:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    double temperature = 20.3456;
    char strTemp[32] = {0};
    snprintf(strTemp, sizeof(strTemp), "%.3f", temperature);
    printf("strTemp = %.*s\n", 4, strTemp);

    return 0;
}

printf("strTemp = %.*s\n", 4, strTemp); 在原码里当遇到符号 * 时,它会去找参数列表,此时它取到的就是4,表明这个字符串只保留 4 个字符长度。

总结:%.* 表示要截取指定长度(精度), * 可以写成具体的数值,如:%.3f,如果直接写 *,则参数列表要有对应的数值,如参数列表中的 4 :printf("strTemp = %.*s\n", 4, strTemp);

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/863625.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

今年的Prime Day2.0来了!亚马逊卖家爆单必做…

亚马逊的Prime Day已经成了全行业的零售假日&#xff0c;不仅仅是消费者离不开它&#xff0c;卖家也离不开这一年一度的狂欢销售盛宴。 回看刚刚过去的Prime Day大促&#xff0c;亚马逊在各方面都获得了较为不错的成绩。 根据亚马逊官方消息&#xff0c;在2023亚马逊Prime会员…

【网络】高级IO

目录 一、五种IO模型 1、阻塞IO 2、非阻塞IO 3、信号驱动 4、IO多路转接 5、异步IO 6、总结 二、高级IO重要概念 1、同步通信与异步通信 2、阻塞 vs 非阻塞 三、非阻塞IO 1、fcntl 2、实现函数SetNoBlock 四、IO多路转接select 1、select 1.1、参数解释 1.2、…

生信豆芽菜——配对型的复杂箱线图使用说明

网站&#xff1a;http://www.sxdyc.com/visualsBoxHalfPlot 一、配对型的复杂箱线图简介 配对型的复杂箱线图原理与箱线图相同&#xff0c;常见于配对样本的数据分析中&#xff0c;在日常研究中&#xff0c;我们会碰到配对资料&#xff0c;例如同一病人治疗前后的变化&#xff…

链表数组OJ题汇总

前言&#xff1a; 在计算机科学中&#xff0c;数组和链表是两种常见的数据结构&#xff0c;用于存储和组织数据。它们分别具有不同的特点和适用场景。 本博客将深入讨论数组和链表在OJ题目中的应用。我们将从基本概念开始&#xff0c;介绍数组和链表的定义和特点&#xff0c;并…

CSDN 我的资源在哪儿?资源上传后找不到?审核是否通过?

CSDN 我的资源在哪儿&#xff1f;资源上传后找不到&#xff1f;审核是否通过&#xff1f; 你是不是很奇怪&#xff0c;资源上传后&#xff0c;找不到了&#xff01;因为他在你们的数据里面不叫“资源”&#xff0c;而是叫“下载”。反正就是怪怪的。 在哪儿查找我的资源&…

力扣221.最大正方形(动态规划)

思路&#xff1a; 思路&#xff1a;从[0,0]元素开始&#xff0c;计算每个元素对应其与[0,0]之间矩阵块中最大正方形边长情况&#xff1a;1&#xff09;matrix [ i , j ] ‘0’ --> 元素对应的最大正方形为0。情况&#xff1a;2&#xff09;matrix [ i , j ] ‘1’ -->…

Java基础入门篇——修饰符

在Java中&#xff0c;修饰符&#xff08;Modifiers&#xff09;是一种用于修改类、方法、变量和其他实体的访问权限、行为或特性的关键字。Java提供了一组修饰符&#xff0c;可以用于实现对代码的封装、继承、多态和访问控制等功能。 1、访问修饰符&#xff08;Access Modifie…

如何将视频转换成音频mp3格式?试一下这几种转换方法

MP3格式是一种被广泛使用的音频格式&#xff0c;可以在几乎所有音频播放器和设备上播放。此外&#xff0c;由于视频文件通常包含大量图像信息&#xff0c;因此其文件大小通常比相应的音频文件要大得多。将视频转换为MP3格式音频可以大大减小文件大小&#xff0c;从而节省硬盘空…

Postman接口自动化测试实战,从0到1一篇彻底打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 postman中的测试 …

python办公自动化有用吗?,python办公自动化能干啥

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;python办公自动化有用吗?&#xff0c;python办公自动化电子书&#xff0c;现在让我们一起来看看吧&#xff01; 前 言 办公自动化是指利用现代化设备和技术&#xff0c;代替办公人员的部分手动或重复性业务活动&#x…

PYTHON专栏

PYTHON专栏 python基础教程 python基础教程 Python练手算法 Python练手算法 Python设计模式 Python设计模式 MySQL教程 MySQL教程 ORM框架SQLAlchemy Python ORM框架SQLAlchemy Python Web框架Django Python Web框架Django Web框架FastAPI Web框架FastAPI http库request…

Flutter系列文章-Flutter UI进阶

在本篇文章中&#xff0c;我们将深入学习 Flutter UI 的进阶技巧&#xff0c;涵盖了布局原理、动画实现、自定义绘图和效果、以及 Material 和 Cupertino 组件库的使用。通过实例演示&#xff0c;你将更加了解如何创建复杂、令人印象深刻的用户界面。 第一部分&#xff1a;深入…

三维模型OSGB格式轻量化压缩必要性分析

三维模型OSGB格式轻量化压缩必要性分析 三维模型是计算机图形学和视觉效果等领域的重要应用之一。然而&#xff0c;由于三维模型通常包含大量的几何信息、纹理信息和其他元素&#xff0c;导致其占用的存储空间和计算资源非常巨大。为了提高三维模型的处理效率和性能&#xff0…

C#实现邮箱验证码

开发环境&#xff1a;C#&#xff0c;VS2019&#xff0c;.NET Core 3.1&#xff0c;ASP.NET Core Web API&#xff0c;163邮箱 1、在163邮箱的设置中开通IMAP/SMTP的服务&#xff0c;授权成功后会弹出一个窗体&#xff08;如下图所示&#xff09;&#xff0c;上面显示了授权密码…

go重制版的海盗王gateserver网关服务端

海盗王原有的gateserver网关经常出现无故报错和掉地图的问题&#xff0c;经过反复修改都无法解决相关问题。 加上&#xff0c;原有的程序已经趋于古董级别&#xff0c;存在很大的兼容性问题。 以上&#xff0c;萌发了用go语言进行重新开发一个gateserver网关程序的想法&#xf…

科技巨头纷纷押注,Web3钱包能否成为撬动行业的支点?

出品&#xff5c;欧科云链研究院 作者&#xff5c;Hedy Bi 在PayPal推出稳定币并引发行业热议之际&#xff0c;公链Aptos昨日宣布与微软合作&#xff0c;共同探索与资产代币化、数字支付和中央银行数字货币相关的创新解决方案。尽管比尔盖茨对加密货币持摇摆态度&#xff0c;…

[小尘送书-第二期]《Power BI数据分析与可视化实战》数据清洗、数据建模、数据可视化设计与高级技法

大家好&#xff0c;我是小尘&#xff0c;欢迎你的关注&#xff01;大家可以一起交流学习&#xff01;欢迎大家在CSDN后台私信我&#xff01;一起讨论学习&#xff0c;讨论如何找到满意的工作&#xff01; &#x1f468;‍&#x1f4bb;博主主页&#xff1a;小尘要自信 &#x1…

F7--DDR4的读写测试-2023-08-11

1.场景 7系列的FPGA芯片不支持DDR4&#xff0c;使用DDR4需要更高性能的FPGA芯片&#xff0c;这里用到Kintex ultrascale是支持DDR4的&#xff0c;具体FPGA芯片是XCKU3P-2FFVA676I&#xff0c;DDR4的颗粒为MT40A512M16LY- 075E时钟频率为750MHz-1333MHz&#xff0c;单颗容量为1G…

JVM运行时五大数据区域详解

前言&#xff1a; java虚拟机再执行Java程序的时候把它所拥有的内存区域划分了若干个数据区域。这些区域有着不同的功能&#xff0c;各司其职。这些区域不但功能不同&#xff0c;创建、销毁时间也不同。有些区域为线程私有&#xff0c;如&#xff1a;每个线程都有自己的程序计数…

腾讯云CVM服务器端口在安全组中打开!

腾讯云服务器CVM端口怎么开通&#xff1f;腾讯云服务器端口是通过配置安全组规则来开通的&#xff0c;腾讯云服务器网以开通80端口为例来详细说下腾讯云轻量应用服务器开启端口的方法&#xff0c;其他的端口的开通如8080、1433、443、3306、8888等端口也适用于此方法&#xff0…