C/C++的可變引數列表
阿新 • • 發佈:2019-01-02
問題描述:
編寫一個簡易的printf函式
程式碼:
#include <bits/stdc++.h>
using namespace std;
void print(const string &s,...)
{
va_list arg_ptr;//定義指向引數的指標
va_start(arg_ptr,s);//初始化指標arg_ptr,第二個實參為第一個可變引數的前一個固定引數
for(int i = 0; i <= s.length() - 1; ++i)
{
if(i <= s.length() - 2 && s[i] == '%' && s[i + 1] == 's')
{
char* t = va_arg(arg_ptr,char*);//返回可變引數,型別為char*
cout << t;
i++;
}
else if(i <= s.length() - 2 && s[i] == '%' && s[i + 1] == 'c')
{
//在C/C++環境中,當省略號對應的實參為bool/char/short時,將自動轉換為 int進行傳遞
char t = va_arg(arg_ptr,int);//返回可變引數,型別為int
cout << t;
i++;
}
else if(i <= s.length() - 2 && s[i] == '%' && s[i + 1] == 'd')
{
int t = va_arg(arg_ptr,int);//返回可變引數,型別為int
cout << t;
i++;
}
else
cout << s[i];
}
va_end(arg_ptr);
return;
}
int main()
{
print("Hello, %s is %c %s man.%d.\n","Rainman",'a',"super",2018);
print("We are netter");
return 0;
}
解決方法:
參考資料