[英]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.
為什么會這樣? 我已經嘗試過調試,但絕對不知道該問題從何而來。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.