実行定義文字列の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%i、myvec、4);またはそれのようなものですか? –
ある時点で文字列ストリームを調べたいと思うかもしれません - 'sprintf'はC++言語に残されているレガシーCの1つですが、タイプ拡張はできません。そして、あなたは独自のラッパーをベクトルの周りに作成して、単に 'ss << myvecwrappervar;'を実行することができます。はるかに多くのCのコーダーがC++のものに偽装しています:-) – paxdiablo