c语言不定参数
时间记录:2024/1/22
一、不定参数的函数定义和使用到的c函数
(1)定义
void fun1(参数类型 argName,...);
示例:
void fun1(int count,...);
(2)获取不定参数的值
#include <stdarg.h> //包含头文件va_list vaList;//定义结构体变量
va_start(vaList,count);//开始遍历不定参数
va_arg(vaList,type);//获取一个不定参数的值,type:int整数、double小数、char*字符串
va_end(vaList);//结束遍历
二、不定参数函数示例
(1)计算int类型数据总和,计算结果为8,argName的值不是使用va_arg函数获取的
#include <stdio.h>
#include <stdarg.h>int madd(const int argName,...);int main()
{printf("%d",madd(3,1,2,5));return 0;
}int madd(const int argName,...)
{int tempNum = 0;va_list vaList;va_start(vaList,argName);int i;for(i=0;i<argName;i++){tempNum += va_arg(vaList,int);}va_end(vaList);return tempNum;
}
(2)字符串格式化拼接,输出100-21.34%-testdfs
#include <stdio.h>
#include <stdarg.h>
#include <string.h>void mprintf(const char *format,...);int main()
{mprintf("%d-%.2f%-%sdfs\n",100,21.345,"test");return 0;
}void mprintf(const char *format,...)
{int fmtPos = 0;//原始字符串format的字符位置char tempStr[32];//拼接好不定参数的新字符串memset(tempStr,0,sizeof(tempStr));//清空数组int tempPos=0;//新字符串tempStr的字符位置va_list vaList;va_start(vaList,format);for(fmtPos=0;fmtPos<strlen(format);fmtPos++){//遍历原始字符串if(format[fmtPos] == '%' && format[fmtPos+1] == 'd'){//格式化输入整数sprintf(tempStr,"%s%d",tempStr,va_arg(vaList,int));tempPos = strlen(tempStr);fmtPos++;}else if(format[fmtPos] == '%' && format[fmtPos+1] == 's'){//格式化输入字符串sprintf(tempStr,"%s%s",tempStr,va_arg(vaList,char*));tempPos = strlen(tempStr);fmtPos++;}else if(format[fmtPos] == '%' && format[fmtPos+1] == 'f'){//格式化输入小数,小数点后全部保留sprintf(tempStr,"%s%lf",tempStr,va_arg(vaList,double));tempPos = strlen(tempStr);fmtPos++;}else if(format[fmtPos] == '%' && format[fmtPos+1] == '.' && format[fmtPos+3] == 'f'){//格式化输入小数,小数后进行保留指定位switch(format[fmtPos+2]){//默认6位,选择1-5位保留case '1':sprintf(tempStr,"%s%.1lf",tempStr,va_arg(vaList,double));tempPos = strlen(tempStr);fmtPos+=3;break;case '2':sprintf(tempStr,"%s%.2lf",tempStr,va_arg(vaList,double));tempPos = strlen(tempStr);fmtPos+=3;break;case '3':sprintf(tempStr,"%s%.3lf",tempStr,va_arg(vaList,double));tempPos = strlen(tempStr);fmtPos+=3;break;case '4':sprintf(tempStr,"%s%.4lf",tempStr,va_arg(vaList,double));tempPos = strlen(tempStr);fmtPos+=3;break;case '5':sprintf(tempStr,"%s%.5lf",tempStr,va_arg(vaList,double));tempPos = strlen(tempStr);fmtPos+=3;break;default:sprintf(tempStr,"%s%lf",tempStr,va_arg(vaList,double));tempPos = strlen(tempStr);fmtPos+=3;break;}}else{tempStr[tempPos] = format[fmtPos];tempPos++;}}va_end(vaList);printf("%s",tempStr);return;
}
相关文章:
c语言不定参数
时间记录:2024/1/22 一、不定参数的函数定义和使用到的c函数 (1)定义 void fun1(参数类型 argName,...); 示例: void fun1(int count,...);(2)获取不定参数的值 #include <stdarg.h> //包含头文件…...
云手机与实体手机的对比
在数字化时代,云手机作为一种虚拟手机在云端服务器上运行,与传统的实体手机相比存在诸多差异。让我们深入探讨云手机与实体手机之间的区别,以便更好地了解它们的特点和优势。 外观上的差异 实体手机具有实际的外观和重量,占据一定…...
diffusion 和 gan 的优缺点对比
sample速度GAN更快,Diffusion需要迭代更多次。 训练难度GAN 的训练可能是不稳定的,容易出现模式崩溃和训练振荡等问题。Diffusion 训练loss收敛性好,比较平稳。 模拟分布连续性Diffusion相较于GAN可以模拟更加复杂,更加非线性的分…...
VC++中使用OpenCV进行人脸检测
VC中使用OpenCV进行人脸检测 对于上面的图像,如何使用OpenCV进行人脸检测呢? 使用OpenCV进行人脸检测十分简单,OpenCV官网给了一个Python人脸检测的示例程序, objectDetection.py代码如下: from __future__ import p…...
11Docker数据持久化
Docker数据持久化 容器中数据持久化主要有两种方式: 数据卷(Data Volumes)数据卷容器(Data Volumes Dontainers) 数据卷 数据卷是一个可供一个或多个容器使用的特殊目录,可以绕过UFS(Unix F…...
RK3588平台开发系列讲解(视频篇)RKMedia框架
文章目录 一、 RKMedia框架介绍二、 RKMedia框架API三、 视频处理流程四、venc 测试案例沉淀、分享、成长,让自己和他人都能有所收获!😄 📢RKMedia是RK提供的一种多媒体处理方案,可实现音视频捕获、音视频输出、音视频编解码等功能。 一、 RKMedia框架介绍 功能: VI(输…...
Vue3 Teleport 将组件传送到外层DOM位置
✨ 专栏介绍 在当今Web开发领域中,构建交互性强、可复用且易于维护的用户界面是至关重要的。而Vue.js作为一款现代化且流行的JavaScript框架,正是为了满足这些需求而诞生。它采用了MVVM架构模式,并通过数据驱动和组件化的方式,使…...
【学网攻】 第(5)节 -- Cisco VTP的使用
文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学网攻】 第(4)节 -- 交换机划分Vlan 前言 网络已经成为了我们生活中不可或缺的一部分,它连接了世界各地的人们,让信息和资…...
uniapp复选框 实现排他选项
选择了排他选项之后 复选框其他选项不可以选择 <view class"reportData" v-for"(val, index) in obj" :key"index"> <view v-if"val.type 3" ><u-checkbox-group v-model"optionValue" placement"colu…...
openssl3.2/test/certs - 004 - cross root and root cross cert
文章目录 openssl3.2/test/certs - 004 - cross root and root cross cert概述笔记END openssl3.2/test/certs - 004 - cross root and root cross cert 概述 索引贴 openssl3.2 - 官方demo学习 - test - certs 笔记 // \file my_openssl_linux_log_doc_004.txt // openssl…...
图像分类】【深度学习】【轻量级网络】【Pytorch版本】EfficientNet_V2模型算法详解
【图像分类】【深度学习】【轻量级网络】【Pytorch版本】EfficientNet_V2模型算法详解 文章目录 【图像分类】【深度学习】【轻量级网络】【Pytorch版本】EfficientNet_V2模型算法详解前言EfficientNet_V2讲解自适应正则化的渐进学习(Progressive Learning with adaptive Regul…...
05.Elasticsearch应用(五)
Elasticsearch应用(五) 1.目标 咱们这一章主要学习Mapping(映射) 2.介绍 Mapping是对索引库中文档的约束,类似于数据表结构,作用如下: 定义索引中的字段的名称定义字段的数据类型ÿ…...
npm更换镜像
大家好!今天给大家分享的知识是如何更换npm镜像 前言 有时候在加载npm时有时会很慢,那是由于node安装插件是从国外服务器下载,受网络影响大,速度慢且可能出现异常,这时候就需要更换镜像,使插件的安装快捷&…...
野指针(C语言)
野指针 //概念:野指针就是指针指向的位置是不可知的(随机的,不正确的 //,没有明确限制的,空间还属于操作系统而不属于程序的) //野指针成因: //1.指针未初始化 #include <stdio.h> int main() { int* p;//局部变量指针未初始化,默认为随机值 //此时p指向的空间不…...
动物姿态识别(数据集+代码)
动物姿态识别是指利用计算机视觉和深度学习技术来识别动物的姿态,即确定动物身体的姿态、方向和位置等信息。这种技术可应用于动物行为研究、动物健康监测、智能养殖等领域。 动物姿态识别的关键技术包括图像处理、特征提取和分类器设计。首先,需要对动…...
JSON-handle工具安装及使用
目录 介绍下载安装简单操作 介绍 JSON-Handle 是一款非常好用的用于操作json的浏览器插件,对于开发人员和测试人员来说是一款很好用的工具,如果你还没有用过,请赶紧下载安装吧,下面是安装过程和具体使用。 下载安装 点击下载JSON…...
kali安装LAMP和DVWA
LANMP简介 LANMP是指一组通常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。 L:指Linux,一类Unix计算机操作…...
上门服务小程序|预约上门服务系统开发有哪些功能?
在现代快节奏的生活中,压力和疲劳常常困扰着我们。为了缓解这种状况,越来越多的人选择去按摩店进行放松。然而,繁忙的工作和家庭责任往往让我们无法抽出时间去按摩店。在这种情况下,上门按摩服务应运而生。而随着科技的发展&#…...
uniapp vue3版本引用 jsencrypt加密库报错:“default“ is not exported by……
个人产生这个异常的原因:将历史项目(vue2)的jsencrypt文件复制到新项目(vue3)里直接引用报错。存在兼容问题,需要重新安装vue3版本的jsencrypt 安装依赖 npm install jsencrypt页面引入 import { JSEncry…...
【WPF.NET开发】WPF中的双向功能
本文内容 FlowDirectionFlowDocumentSpan 元素非文本元素的 FlowDirection数字替换 与其他任何开发平台不同,WPF 具有许多支持双向内容快速开发的功能,例如,同一文档中混合了从左到右和从右到左的数据。 同时,WPF 也为需要双向功…...
如何精准下载GitHub项目中的特定文件或文件夹
如何精准下载GitHub项目中的特定文件或文件夹 【免费下载链接】DownGit github 资源打包下载工具 项目地址: https://gitcode.com/gh_mirrors/dow/DownGit 在GitHub上查找开源资源时,开发者常常面临一个现实问题:如何仅获取项目中的特定模块而非整…...
揭秘低查重AI教材编写,AI工具助力快速生成专业教材!
许多教材编写者常常感到一种无奈:虽然教材的主体内容费尽心思地打磨完成,但因缺乏相应的配套资源,整体教学效果受到限制。设计课后练习时,需要的梯度化题型缺少新意;想要制作直观的课件,却又缺乏相关的技术…...
Verilog实战:从零构建高效仲裁器(Arbiter)的设计与优化
1. 仲裁器基础概念与设计需求 在数字系统中,当多个主设备(Master)需要共享同一总线或存储资源时,仲裁器就像交通警察一样协调访问顺序。我遇到过这样一个真实案例:某AI芯片设计中使用8个计算单元共享DDR控制器…...
多智能体编排实战:从架构设计到生产部署的12周训练指南
1. 项目概述与核心价值最近在探索如何系统性地掌握多智能体编排技术时,我遇到了一个名为“Shadow Dojo”的开源项目。这个名字很有意思,“道场”一词本身就意味着一个需要持续练习、精进技艺的地方。这个项目将自己定位为“训练场”,目标非常…...
从ENIAC到AI:计算机技术演进的四个关键时代与未来展望
1. 从电子管到晶体管:计算机的诞生与早期进化 1946年2月15日,美国宾夕法尼亚大学的莫尔学院向世界展示了ENIAC(Electronic Numerical Integrator And Computer),这台重达30吨的庞然大物标志着现代计算机时代的开始。E…...
如何快速将磁力链接转换为种子文件:面向资源管理者的完整解决方案
如何快速将磁力链接转换为种子文件:面向资源管理者的完整解决方案 【免费下载链接】Magnet2Torrent This will convert a magnet link into a .torrent file 项目地址: https://gitcode.com/gh_mirrors/ma/Magnet2Torrent 你是否曾因磁力链接失效而丢失珍贵资…...
Visual Studio Code 在 MacOS 在 Linux 上的完整安装与高效开发指南:从部署到远程开发实战
VVisual Studio Code 在 MacOS 在 Linux 上的完整安装与高效开发指南:从部署到远程开发实战 摘要一、VS Code 简介二、下载与安装1. 下载 VS Code2. 安装步骤方法 1:通过包管理器安装(以 Ubuntu/Debian 为例)方法 2:通…...
Simulink Assignment模块实战:如何像写C代码一样更新数组元素?
Simulink Assignment模块实战:从C语言思维到模型化设计的无缝衔接 对于习惯用C语言编写控制算法的工程师来说,第一次接触Simulink的模块化设计往往会感到不适应——尤其是当需要更新数组中的特定元素时。在C语言中,我们只需简单地写下array[2…...
软件厂商突然要审计,你们公司 IT 资产管理能扛得住吗
某天下午,公司法务收到一封措辞正式的律师函。发函方是一家知名软件厂商,函件内容大意是:根据他们的监测数据,贵司存在超量使用其软件产品的情况,要求在三十天内配合完成软件资产审计,提供全公司范围内该软…...
别再死记硬背了!用数字电路里的‘上升沿’和‘下降沿’来理解epoll的ET模式(附Linux C++代码演示)
从数字电路到高性能IO:用硬件思维理解epoll的边沿触发模式 当你在示波器上观察一个时钟信号时,工程师们最关心的往往不是电平本身的高低,而是电平跳变的瞬间——那个被称为"边沿"的微妙时刻。这种硬件设计中的经典概念,…...
