• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > c语言可变参数实现示例

c语言可变参数实现示例

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c语言代码示例,c语言简单代码示例,c语言流程图示例,c语言示例程序,c程序示例等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

这段代码展示了如何不使用<stdarg.h>中的va_list、va_start、va_end宏来实现自定义可变参数以及如何改变默认的%d、%f、%s等格式字符。

// echo("$i, $s, $l, $c", arg1, arg2, arg3, arg4)
// $i -- int, $s -- string, $l -- long, $c -- char
void echo(char *fmt, ...)
{
    int i, fmtlen = strlen(fmt);
    int *args = (int *)((char *)(&fmt) +sizeof(char *));

    char cbuff[BUFSIZ] = {'\0'}, nbuff[BUFSIZ] = {'\0'}; // #define BUFSIZ 512 in <stdio.h>

    for (i = 0; i < fmtlen; i++)
    {
        if (('$' == fmt[i]) && ((i + 1) < fmtlen))
        {
            switch (fmt[i + 1])
            {
            case 's': strcat(cbuff, (char *)(*args));
                break;
            case 'c': cbuff[strlen(cbuff)] = (char)(*args);
                break;
            case 'i': itoa(*args, nbuff, 10); strcat(cbuff, nbuff);
                break;
            case 'l': ltoa((long)(*args), nbuff, 10); strcat(cbuff, nbuff);
                break;
            default: break;
            }
            ++args, ++i;
        }
        else
            cbuff[strlen(cbuff)] = fmt[i];
    }

    cbuff[strlen(cbuff) + 1] = '\0';
    fputs(cbuff, stdout);
}
int main()
{
    echo("arg_list = $i, $s, $l, $c", 2, "hello", 8, 'a'); // Si -- %d, $s -- %s, $l -- %ld, $c -- %c

    return 0;
}
</div>

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C语言代码中调用C++代码的方法示例
  • C语言 文件的随机读写详解及示例代码
  • C语言 以字符串的形式读写文件详解及示例代码
  • C语言 以字符形式读写文件详解及示例代码
  • C语言 文件的打开与关闭详解及示例代码
  • C语言 位运算详解及示例代码
  • C语言 结构体和指针详解及简单示例
  • C语言 结构体数组详解及示例代码
  • C语言 指针数组详解及示例代码
  • C语言 二级指针详解及示例代码

相关文章

  • 2017-05-28掌握C++编程中反斜杠续行符的使用方法
  • 2017-05-28c/c++输出重定向的方法
  • 2017-05-28数据结构课程设计- 解析最少换车次数的问题详解
  • 2017-05-28c++中容器之总结篇
  • 2017-05-28C++ 反射机制详解及实例代码
  • 2017-05-28C++基于递归和非递归算法判定两个二叉树结构是否完全相同(结构和数据都相同)
  • 2017-05-28解决在Mac下直接解压C++静态库出现的问题
  • 2017-05-28C++快速排序的分析与优化详解
  • 2017-05-28C语言 位运算详解及示例代码
  • 2017-05-28C++常对象精讲_const关键字的用法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 关于C++类的成员初始化列表的相关问题
    • 详解C语言中的字符串拼接(堆与栈)
    • 浅谈C++中的string 类型占几个字节
    • 希尔排序算法的C语言实现示例
    • 基于SVN源码服务器搭建(详细教程分析)
    • 如何解决C语言,函数名与宏冲突
    • C语言实现清空指定文件夹中所有文件的方法
    • 使用钩子如何锁定键盘的方法分享
    • 深入剖析C++中的struct结构体字节对齐
    • 实例解析C++中类的成员函数指针

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有