簡體   English   中英

va_list中的未知字符?

[英]Unknown chars in va_list?

#include <stdio.h>
#include <stdarg.h>

void s(const char* param, ...)
{
    va_list arguments;
    va_start (arguments, param);
    const char* param_now = va_arg(arguments, const char*);

    while(param_now != NULL)
    {
        printf("%s", param_now);
        param_now = va_arg(arguments, const char*);
    }

    va_end (arguments);
}

int main()
{
    s("one", "two");
    return 0;
}

為什么我上面的代碼不起作用,並顯示未知符號而不是一個和兩個?

編輯 :找到了一種非常聰明的方法來避免在結尾處包含NULL:

void add_s(const char* param, ...)
{
    return s(param, NULL);
}

您永遠不會用NULL參數終止您的序列,而while循環正在檢查該參數。

s("one", "two" , NULL );

現在只有“兩個”出現。 那是因為第一個字符串在參數param 因此,您必須先打印它,然后再打印所有可選參數。

您可以使用宏來避免編寫NULL終止符。 就像是:

#define my_s( ... )    s( __VA_ARGS__ , NULL )

注意,這需要在my_s中至少有一個參數。 (並考慮避免在嚴肅的代碼中使用宏)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM