首先要处理这种省略号的参数的话,需要包含头文件#include <stdarg.h>,然后利用下面的函数对“...”省略号变量进行处理。

va_list arg;
type va_arg( va_list arg, type );
void va_end( va_list arg );
void va_start( va_list arg, prev_param ); 

下面实现一个自己的print(),它的参数的传递是根据具体输入的个数决定的。如下:

void print(char *msg, ...)
{char *p = msg;va_list arg;va_start(arg, msg);int _i;char _c;char * _s;while(*p != '\0'){switch(*p){case '%':p++;switch(*p){case 'd':_i = va_arg(arg, int);printf("%d", _i);break;case 'c':_c = va_arg(arg, int);printf("%c", _c);break;case 's':_s = va_arg(arg, char*);printf("%s", _s);break;default:break;}break;default:printf("%c", *p);break;}p++;}va_end(arg);
}

使用过程:

print("Hello %d, %s\n", 12, "World\n");

给出我的输出:

$ gcc main.c
$ ./a
Hello 12, World

当然这只是最简单的实现,实际的处理过程要比这复杂得多。仅供学习参考!!

给出完整的代码:

#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>void print(char *msg, ...)
{char *p = msg;va_list arg;va_start(arg, msg);int _i;char _c;char * _s;while(*p != '\0'){switch(*p){case '%':p++;switch(*p){case 'd':_i = va_arg(arg, int);printf("%d", _i);break;case 'c':_c = va_arg(arg, int);printf("%c", _c);break;case 's':_s = va_arg(arg, char*);printf("%s", _s);break;default:break;}break;default:printf("%c", *p);break;}p++;}va_end(arg);
}int main(int argc, char **argv)
{print("Hello %d, %s\n", 12, "World\n");return 0;
}

C语言使用函数参数传递中的省略号:va_list, va_start, va_arg, va_end相关推荐

  1. 如何获取函数的变长参数(va_list, va_start, va_arg, va_end)

    最近在花时间研读C++. 函数这章讲到了函数的变长参数(ellipsis...),但是primer中讲得比较浅,提到了怎么声明怎么调用,但是没有写明在函数内部是如何获取变长的参数的. 1)省略号(el ...

  2. C语言——printf()函数参数传递问题

    C语言--printf( ) 函数参数传递问题 一.参数说明 printf() 函数是输出函数,可以实现和用户之间的交流,该函数的参数由两部分组成,即格式化字符串.待打印项 0-n 项,函数的格式如下 ...

  3. 函数参数中带省略号的用法

     [转]函数参数中带省略号的用法 本文摘自CDSN<可变参数学习笔记>,原帖链接:http://topic.csdn.net/t/20041124/09/3582660.html 前言 ...

  4. (C++)函数参数传递中的一级指针和二级指针

    主要内容: 1.一级指针和二级指针 2.函数指针传递的例子 3.什么时候需要传递二级指针? 4.二级指针在链表中的使用 1.一级指针和二级指针 一级指针:即我们一般说的指针,就是内存地址; 二级指针: ...

  5. r语言barplot函数图中加标签_R语言中绘制条形图的简单方法

    原标题:R语言中绘制条形图的简单方法 条形图(bar chart)是用宽度相同的条形的高度或长短来表示数据多少的图形.它主要用来展示不同分类(横轴)下某个数值型变量(纵轴)的取值.在实际中,条形图主要 ...

  6. c++语言swap函数,C++中swap函数

    本文是我用到swap函数时,对其产生好奇,所以结合网上有关博文写下的.个人水平有限,若有错误的地方,欢迎留言指出.谢谢! 一.通用的函数交换模板 template void swap(T &a ...

  7. 在C语言的函数定义中 如果不需要返回结果,在C语言的函数定义中,如果不需要返回结果,就可以省略return语句...

    语言义中语句 数定省略保险般来能一几项的职以下说有. 来源统计济数据的主要调查得社会经是获,需要包括如下容(的内应该. 具体是指,结果积反映房空置面商品,而尚未出屋期末报告工可供销的房出租出租已竣是指 ...

  8. c语言延时函数delay_STM32中精确延时函数的实现

    在与传感器或者模块的总线进行通信的时候,常常需要使用到精确延时,一般我们会封装几个常用延时函数,下面我们以STM32F103芯片为例,详细介绍一下STM32下一种精确延时函数的实现: 时钟树 下图中紫 ...

  9. C语言bound函数,C++中lower_bound函数和upper_bound函数

    STL中关于二分查找的函数有三个lower_bound .upper_bound .binary_search .这三个函数都运用于有序区间(当然这也是运用二分查找的前提),下面记录一下这两个函数. ...

最新文章

  1. 计算机视觉:Bag of words算法实现图像识别与搜索
  2. Java中常见的异常
  3. SQL Server 2005 用户自定义函数
  4. kindle刷多看系统_疑问解答 | kindle真的能护眼吗?
  5. pymc3使用_使用PyMC3了解飞机事故趋势
  6. 抽象类和接口的共同点和区别
  7. C语言局部变量、全局变量、静态局部变量、静态全局变量
  8. 如何获取变量token的值
  9. 数据结构题集(C语言版 清华大学出版社)
  10. i4助手linux,爱思i4助手刷机教程
  11. 使用python破解zip、rar压缩包密码
  12. 二维数组—小学二年级班级座位表
  13. without updating pid file
  14. DGIOT物联网平台简介
  15. 2021年CCPC网络预选赛重赛补题
  16. 【python】如何下载漫画章节随时看?漫迷们不容错过哦
  17. 客制化PO单据模板(实例)
  18. PHP 常用英语精简1
  19. 用VC++6.0制作简易浏览器(转)
  20. 长城皮卡品牌CEO张昊保:皮卡是一个独特的品类,想玩门槛很高

热门文章

  1. leetcode题解15-三数之和(双指针经典)
  2. 聊聊区块链,虽然我不挖矿!
  3. 一站式WPF--依赖属性(DependencyProperty)
  4. 最简单 NDK 样例
  5. .NET Compact Framework.代码展开ComboBox下拉选项
  6. Sql server2005中如何格式化时间日期
  7. 3-Spring Boot的数据访问
  8. 简述php和web交互过程,PHP与Web页面交互操作实例分析
  9. python类的命名空间_Python之关于类变量的两种赋值区别详解
  10. idea卸载不干净怎么办_家里拖地老是不干净怎么办,来跟我学!