Re: [問題] 把 vector 傳給 printf

看板C_and_CPP作者 (「雄辯是銀,沉默是金」)時間9年前 (2016/08/01 04:47), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串2/2 (看更多)
用了一個不太高明的方法解決了。 呼叫 unix tool printf 來解決這問題。 將 args 產生成 printf 的指令, 在透過 system 執行。 int main(int argc, char *argv[]) { vector<string> args; string fmt = R"("test %d %s\n")"; string p_str = tree_string(fmt); args.push_back(fmt); args.push_back("123"); args.push_back("string_test"); string cmd=R"(printf "My name is \"%s\".\nIt's a pleasure to meet you %d.\n" "John" )"; string cmd_s{"printf "}; for (auto &i : args) { cmd_s += i; cmd_s += " "; } cout << "cmd_s: " << cmd_s << endl; cmd+="25"; system(cmd.c_str()); system(cmd_s.c_str()); return 0; } 至於為什麼要這麼做是因為我要 eval printf 這個運算式。 單純把 parser 的 token 傳給 printf 就可以很簡單的支援 printf 了。 如下的 c。 int a; int f2(int i) { 1+2; return 2+5+i; } int main() { int x,y; int a; char *p; p="point strint"; a=99; printf("a: %d\n", a); y=2; x = f2(y+1); printf("f2(): %d, %s, y=%d, p=%s\n", x, "test_string", y, p); } ※ 引述《descent (「雄辯是銀,沉默是金」)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : linux/g++ : 我有一個 vector<string> args : 想做到以下功能 : if (args.size() == 2) : printf(args[0].c_str(), args[1].c_str()); : else if (args.size() == 3) : printf(args[0].c_str(), stoi(args[1]), args[2].c_str()); : 有一勞永逸的方法嗎? : args[0] 會是 "%d \n" 之類的 format string : 試了一些方法還是不行。 : 好像只能模擬 c 語言傳參數的方法。 -- 紙上得來終覺淺,絕知此事要躬行。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 175.98.177.130 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1470026853.A.13F.html

08/02 01:39, , 1F
type safety表示:...
08/02 01:39, 1F

08/02 15:21, , 2F
突然想到好像可以用m4寫macro
08/02 15:21, 2F
文章代碼(AID): #1NdjHb4_ (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1NdjHb4_ (C_and_CPP)