欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c語言可變參數(shù)實現(xiàn)示例

 更新時間:2014年04月08日 10:27:55   作者:  
這篇文章主要介紹了c語言可變參數(shù)實現(xiàn)示例,需要的朋友可以參考下

這段代碼展示了如何不使用<stdarg.h>中的va_list、va_start、va_end宏來實現(xiàn)自定義可變參數(shù)以及如何改變默認的%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;
}



相關(guān)文章

  • c語言switch反匯編的實現(xiàn)

    c語言switch反匯編的實現(xiàn)

    本文主要介紹了c語言switch反匯編,在分支較多的時候,switch的效率比if高,在反匯編中我們即可看到效率高的原因,感興趣的可以了解一下
    2021-06-06
  • C++多線程實現(xiàn)TCP服務器端同時和多個客戶端通信

    C++多線程實現(xiàn)TCP服務器端同時和多個客戶端通信

    通訊建立后首先由服務器端發(fā)送消息,客戶端接收消息;接著客戶端發(fā)送消息,服務器端接收消息,實現(xiàn)交互發(fā)送消息。本文主要介紹了C++多線程實現(xiàn)TCP服務器端同時和多個客戶端通信,感興趣的可以了解一下
    2021-05-05
  • C語言實現(xiàn)逆波蘭式實例

    C語言實現(xiàn)逆波蘭式實例

    這篇文章介紹了C語言實現(xiàn)逆波蘭式實例,有需要的朋友可以參考一下
    2013-09-09
  • VS+QT編譯環(huán)境中字符亂碼問題解決方法

    VS+QT編譯環(huán)境中字符亂碼問題解決方法

    編碼就是把?個字符編碼成二進制碼存起來的方式,而解碼就是把這個二進制碼按照原本編碼的規(guī)則還原成原來的字符,這篇文章主要介紹了VS+QT編譯環(huán)境中字符亂碼問題詳解,需要的朋友可以參考下
    2024-01-01
  • Visual Studio Code (vscode) 配置C、C++環(huán)境/編寫運行C、C++的教程詳解(Windows)【真正的小白版】

    Visual Studio Code (vscode) 配置C、C++環(huán)境/編寫運行C、C++的教程詳解(Windows

    這篇文章主要介紹了Visual Studio Code (vscode) 配置C、C++環(huán)境/編寫運行C、C++的教程詳解(Windows)【真正的小白版】,圖文詳解介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • C++中多線程間共享數(shù)據(jù)詳解

    C++中多線程間共享數(shù)據(jù)詳解

    這篇文章主要為大家詳細介紹了C++中多線程間共享數(shù)據(jù)的相關(guān)知識,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-01-01
  • 詳解C++中new運算符和delete運算符的使用

    詳解C++中new運算符和delete運算符的使用

    這篇文章主要介紹了C++中new運算符和delete運算符的使用,文章來自于微軟開發(fā)者文檔,因而根據(jù)Visual C++的一些特性來進行講解,需要的朋友可以參考下
    2016-01-01
  • C語言庫函數(shù)中qsort()的用法

    C語言庫函數(shù)中qsort()的用法

    大家好,本篇文章主要講的是C語言庫函數(shù)中qsort()的用法,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • C++11學習之多線程的支持詳解

    C++11學習之多線程的支持詳解

    這篇文章主要為大家詳細介紹了C++11中多線程支持的相關(guān)資料,文中的示例代碼講解詳細,對我們深入了解C++11有一定的幫助,需要的可以參考一下
    2023-02-02
  • C++ Boost Lockfree超詳細講解使用方法

    C++ Boost Lockfree超詳細講解使用方法

    Boost是為C++語言標準庫提供擴展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標準庫的后備,是C++標準化進程的開發(fā)引擎之一,是為C++語言標準庫提供擴展的一些C++程序庫的總稱
    2022-11-11

最新評論