我想弄清楚如何在運行時定義的字符串的C++ sprintf調用中使用運行時定義的列表。該字符串已經在那裏有令牌,我只需要以某種方式調用它來匹配字符串中的儘可能多的參數。基本上把下面的4個調用編譯成一個可以適用於所有這些調用的調用,這些調用沿着sprintf(緩衝區,「這是我的帶有args%i的字符串」,myvec)。Sprintf使用運行時定義的字符串和列表
std::vector<int> myvec = {0, 1, 2, 3, 4};
char buffer [500];
sprintf (buffer, "This is my string with args %i", myvec[0], myvec[1], myvec[2], myvec[3], myvec[4]);
sprintf (buffer, "This is my string with args %i %i", myvec[0], myvec[1], myvec[2], myvec[3], myvec[4]);
sprintf (buffer, "This is my string with args %i %i %i", myvec[0], myvec[1], myvec[2], myvec[3], myvec[4]);
sprintf (buffer, "This is my string with args %i %i %i %i", myvec[0], myvec[1], myvec[2], myvec[3], myvec[4]);
我談過我的同事,他們不認爲這樣的事情存在,所以我想我把它放在那裏。有任何想法嗎?
我想我不太關注。函數如何知道有多少個參數?你的意思可能是'sprintf(緩衝區,「這是我的字符串與args%我」,myvec,4);'或類似的東西? – 2012-04-23 01:52:14
您可能想在某個時候查看字符串流 - 「sprintf」是C++語言中遺留的C語言之一,但它不是類型可擴展的。然後,您可以創建自己的矢量包裝器,只需:'ss << myvecwrappervar;'。有太多的C編碼器僞裝成C++的:-) – paxdiablo 2012-04-23 02:13:43