簡體   English   中英

C ++-Va_List(變量數字參數)無法正確轉換

[英]C++ - Va_List (Variable Number Parameters) not casting properly

我在C ++中創建了一個打印函數,它應該可以更好地替代std::cout ,它與C中的printf函數非常相似。

問題在於它接收到可變數量的參數,但使用不正確。

這是源代碼:

void print(string s, ...)
{
    int len = s.length();
    int pSum = 0;
    for (int i = 0; i < len; i++)
    {
        if (s[i] == '%' && i < len - 1)
        {
            char c = s[i + 1];
            if (c == 'd' || c == 'i' || c == 's') pSum++;
        }
    }
    va_list ap; // Initialization of the VA list
    va_start(ap, pSum); // Start iterating through the VA list
    int r;
    for (int i = 0; i < len; i++)
    {
        if (s[i] == '%' && i < len - 1) // Check for % in the string
        {
            char c = s[i + 1];
            if (c == 'i') 
            {
                r = va_arg(ap, int);
                cout << r;
                i++;
            }
        }
        else cout << s[i];
    }
    va_end(ap); // Stop iterating over the VA list
    fflush(stdout); // Flush standard output stream
}

我使用該函數調用測試了此代碼:

print("The number %i is the only even prime number.", 2);

輸出為:

The number -858993460 is the only even prime number.

為什么會這樣? 我已經嘗試過調試,但絕對不知道該問題從何而來。

va_start的第二個參數應該是函數的最后一個命名參數,因此請使用:

va_start(ap, s);

現場例子

暫無
暫無

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

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