a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

c語言可變參數實現示例

2020-01-26 15:32:51
字體:
來源:轉載
供稿:網友

這段代碼展示了如何不使用<stdarg.h>中的va_list、va_start、va_end宏來實現自定義可變參數以及如何改變默認的%d、%f、%s等格式字符。

復制代碼 代碼如下:

#include <stdio.h>
#include <stdlib.h> // itoa() and ltoa()
#include <string.h> // strcat() and strlen()

// 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;
}



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 午夜电影网址 | 人人爽人人人 | 久久久久久久久久久久网站 | 一级免费毛片 | 中文字幕在线欧美 | 天天天天综合 | 欧美日韩亚洲国产 | 涩涩视频在线观看免费 | 欧美激情精品一区 | 中文字幕在线精品 | 亚洲婷婷一区二区三区 | 亚洲va中文字幕 | 羞羞av| 日韩不卡一区二区 | 亚洲午夜视频在线观看 | 日韩视频精品在线 | 久久久久高清 | av一区二区三区四区 | 日韩午夜场 | 亚洲精品一区二区另类图片 | 欧美一级内谢 | 亚洲人在线播放 | 欧美三区视频 | 国产精品婷婷午夜在线观看 | 99视频在线看 | 国产精品一区自拍 | 久久精品视频免费观看 | 激情久久av一区av二区av三区 | 亚洲综合在线一区二区 | 在线观看日韩精品 | 亚洲精品成人 | 精品一区二区免费视频 | 在线欧美一区 | zzz444成人天堂7777 | 国产免费av在线 | 91精品中文字幕一区二区三区 | 日本不卡免费新一二三区 | 97超碰在线免费 | 国产精品久久久久久久久久久久久 | 日本亚洲一区 | 日韩国产在线 |