1. 程式人生 > >C/C++的可變引數列表

C/C++的可變引數列表

問題描述:
編寫一個簡易的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; }

解決方法:
參考資料