我的C语言可变参数的实现

实现环境:Fedora12 + gcc

任务:用C语言实现一个参数可变的函数,以方便输出。

源代码如下:

#include <stdio.h>
#include <stdarg.h>
#include <string.h>
int sum(int data, ...)
{
int i = data, s = 0;
va_list vl;
va_start(vl, data);
while(i != -1)
{
s += i;
i = va_arg(vl, int);
}
va_end(vl);
return s;
}
char smessage[1024] = {0};
int display(const char *fmt, ...)
{
va_list args;
int n;
va_start(args, fmt);
n = vsprintf(smessage, fmt, args);
va_end(args);
return n;
}
int main()
{
int s = sum(1, 3, 4, 5, -1);
printf("sum = %d\n", s);
int ret = display("Here: %s, %d, %.2f, %s", "hello", 45, 33.6535896, "How do you do");
printf("ret = %s(%d)\n", smessage, ret);
return 0;
}


输出如下:

sum = 13
ret = Here: hello, 45, 33.65, How do you do(37)


关键点还是调用了vsprintf,另外就是要了解va_start(), va_end()以及va_list的使用!

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

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

相关文章

Leetcode刷题(1)两数之和

最好的种树是十年前,其次是现在。歌谣 每天一个前端小知识 提醒你改好好学习了 知乎博主 csdn博主 b站博主 放弃很容易但是坚持一定很酷 我是歌谣 喜欢就一键三连咯 你得点赞是对歌谣最大的鼓励 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中…

使用WEB方式更改域用户帐户密码

使用WEB方式更改域用户帐户密码 <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />1、这个只是域帐户密码的一种更改方式&#xff0c;正规来说&#xff0c;域用户帐户的密码更改方式可以有6种。今天介绍给大家的只是其中一种&…

一个路径下挂载(匹配)多个子组件

效果图如下 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>Document</title><script type"text/javascript" src"./lib/vue-2.4.0.js"></script><scrip…

JS之字符串截取函数substr

作用&#xff1a;substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符 语法&#xff1a;stringObject.substr(start,length) 参数1&#xff1a;必需。要抽取的子串的起始下标。必须是数值。如果是负数&#xff0c;那么该参数声明从字符串的尾部开始算起的位置。…

面向对象中的修饰关键词

final:用来修饰类和方法&#xff0c;修饰类的时候表示这个类是终极类&#xff0c;不能被其他类继承&#xff0c;修饰方法的时候&#xff0c;表示这个方法是终极方法&#xff0c;不能被子类重写。 static:用来修饰属性和方法&#xff0c;修饰属性的时候表示这个属性是静态属性&a…

GDB命令大全

GDB的使用   当程序出错并产生core 时   快速定位出错函数的办法   gdb 程序名 core文件名(一般是core,也可能是core.xxxx)   调试程序使用的键   r run 运行.程序还没有运行前使用   c cuntinue 继续运行。运行中断后继续运行   q 退出   kill 终止调…

Leetcode刷题(2)回文数

最好的种树是十年前,其次是现在。歌谣 每天一个前端小知识 提醒你改好好学习了 知乎博主 csdn博主 b站博主 放弃很容易但是坚持一定很酷 我是歌谣 喜欢就一键三连咯 你得点赞是对歌谣最大的鼓励 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &…

ZT Web Control 开发系列(一) 页面的生命周期

http://www.cnblogs.com/joeliu/category/143125.htmlPage是WebForm编程基本元素&#xff0c;它从TemplateControl派生&#xff0c;而TemplateControl又从Control派生&#xff0c;所以Page实际就是一个Control。同时Page也实现了IHttpHandler接口&#xff0c;所以它可以接受Htt…

计算属性computed的使用

效果图 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>Document</title><script type"text/javascript" src"./lib/vue-2.4.0.js"></script></head>…

JS之字符串截取方法substring

作用&#xff1a;substring() 方法用于提取字符串中介于两个指定下标之间的字符 语法&#xff1a;stringObject.substring(start,stop) 参数1&#xff1a;必需。一个非负的整数&#xff0c;规定要提取的子串的第一个字符在 stringObject 中的位置 参数2&#xff1a;可选。一…

gdb命令手册

GDB 的命令很多&#xff0c;本文不会全部介绍&#xff0c;仅会介绍一些最常用的。在介绍之前&#xff0c;先介绍GDB中的一个非常有用的功能&#xff1a;补齐功能。它就如同Linux下SHELL中的命令补齐一样。当你输入一个命令的前几个字符&#xff0c;然后输入TAB键&#xff0c;如…

HTML5增加的几个新的标签

HTML5又2008年诞生&#xff0c;HTML5大致可以等同于htmlcss3javascriptapi.... so --->支持css3强大的选择器和动画以及javascript的新的函数 先来记录一下吧&#xff01; 1。 <canvas>画布标签 HTML5的新标签 举例&#xff1a; 1 <html>2 <head>3 …

在 Linux 中使用动态磁盘

是否遇到过这样的问题&#xff0c;划分了<?xml:namespace prefix st1 ns "urn:schemas-microsoft-com:office:smarttags" />10G的一个分区&#xff0c;挂接到/home 下&#xff0c;可是随着时间的流逝&#xff0c;10G的空间开始不够用了&#xff0c;需要把它…

vue项目结构(未抽离成.vue文件前的结构)

最终效果 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>vue项目结构</title><script type"text/javascript" src"./lib/vue-2.4.0.js"></script><scri…

JS之Boolean的toString方法

作用&#xff1a;toString() 方法可把一个逻辑值转换为字符串&#xff0c;并返回结果 语法&#xff1a;booleanObject.toString() 返回值&#xff1a;根据原始布尔值或者 booleanObject 对象的值返回字符串 “true” 或 “false” 注意1&#xff1a;如果调用该方法的对象不是…

linux下exec系列(一)

fork()是用于建立进程的手段之一&#xff0c;但是fork()只能建立相同程序的副本。幸运的是&#xff0c;Linux系统还提供了系统调用exec系列。它可用于新程序的运行。 如果exec调用成功&#xff0c;调用进程将被覆盖&#xff0c;然后从新程序的入口开始执行。这样就产生了一个新…

小程序跳转H5页面

在使用web-view时发现了一个问题总是会过段时间自己跳转到web-view是src地址 由于我是写的轮播图中嵌套一个web-view 所以当时我以为是轮播图和这个web-view冲突了 其实设计就是如此 自己跳 <view class"page-body"><web-view src"{{url}}">&…

MOSS数据库服务器迁移步骤

迁移场景: MOSS场具有四台服务器:两台前端,一台index服务器,一台数据库服务器. 需要把数据库迁移到采用集中存储的数据库集群上. 源数据库服务器和目标数据库服务器处于同一个AD域中,目标数据库服务器集群已经配置好. 迁移步骤如下: (1) 在所有MOSS服务器上停掉所有MOSS服务,包…

React开发(116):ant design search引入

import { Input } from antd;const { Search } Input;