SOGO論壇
  登入   註冊   找回密碼
查看: 434|回覆: 0
列印 上一主題 下一主題

[技術文章] 變長參數列 [複製連結]

Rank: 11Rank: 11Rank: 11Rank: 11

熱心參予論壇活動及用心回覆主題勳章 數位硬體勳章

狀態︰ 離線
跳轉到指定樓層
1
發表於 2012-7-17 09:51:16 |只看該作者 |倒序瀏覽


在說明函數的章節裡,所有範例函數的參數個數都是固定的,但讀者有沒有發覺使用printf,scanf函數時,我們所給予的參數個數卻是不定長的!本節說明如何定義具有不定長參數的函數。

printf的宣告如下:

int printf(char *fmt, ...)

處理不定長參數需要用到<stdarg.h>裡面的函數。va_list型態可用來存取每一個參數:

#include <stdarg.h>
// or #include <sys/varargs.h>
void minprintf(char *fmt, ...) {
    va_list ap; /* pointer to each unnamed arg in turn */
    char *p, *sval;
    int ival;
    double dval;
    va_start(ap, fmt); /* make ap point to 1st unnamed arg */
    for (p = fmt; *p; p++) { // check each character
        if (*p != '%') { // 不是特殊字元,直接輸出即可
            putchar(*p);
            continue;
        }
        switch(*++p) { // 檢查%的下一個字元是甚麼
        case 'd':
            ival = va_arg(ap, int);
            printf("%d", ival);
            break;
        case 'f':
            dval = va_arg(ap, double);
            printf("%f", dval);
            break;
        case 's':
            for (sval = va_arg(ap, char *); *sval; sval++) { // 印出sval所指到的所有字元
                putchar(*sval);
            }
            break;
        default :
            putchar(*p);
            break;
        }
    }
    va_end(ap); // clean up when done */
}
喜歡嗎?分享這篇文章給親朋好友︰
               感謝作者     

請注意︰利用多帳號發表自問自答的業配文置入性行銷廣告者,將直接禁訪或刪除帳號及全部文章!
您需要登錄後才可以回覆 登入 | 註冊


本論壇為非營利自由討論平台,所有個人言論不代表本站立場。文章內容如有涉及侵權,請通知管理人員,將立即刪除相關文章資料。侵權申訴或移除要求:abuse@oursogo.com

GMT+8, 2024-5-30 23:46

© 2004-2024 SOGO論壇 OURSOGO.COM
回頂部