私はC++でこれを達成するためにどのように頭を割れてきました:C++ Sprintf 2nd(format)引数で変数を渡す方法は?
string format = "what is your %s";
new_string = sprintf(buffer, format, name);
すべてのヘルプは非常に高く評価されるだろう。
ありがとうございます!
私はC++でこれを達成するためにどのように頭を割れてきました:C++ Sprintf 2nd(format)引数で変数を渡す方法は?
string format = "what is your %s";
new_string = sprintf(buffer, format, name);
すべてのヘルプは非常に高く評価されるだろう。
ありがとうございます!
使用format.c_str()
:
string format = "what is your %s";
int total = sprintf(buffer, format.c_str(), name);
がまた返された値が新しい文字列ではないことに注意して、それが出力する文字列ですバッファです。返される値は、実際に書き込まれた文字の総数です。このカウントには、文字列の末尾に自動的に追加されるヌル文字は含まれません。失敗すると、負の数が返されます(see doc here)。
しかし、@Joachimが彼の答えで説明したように、C++では、std::ostringstream
がより良くタイプセーフです。
sprintf
に渡されるフォーマットは、std::string
ではなく、char*
でなければなりません。 sprintf
は、作成されたバッファへのポインタではなく、書き込まれた文字数も返します。
もう1つの可能性は、std::ostringstream
を使用してフォーマットを行うことです。
stringstream
より多くのOOであるC++ STLを使用することができます。
documentationをご覧ください。
sprintf
はCライブラリの一部であり、したがってstd :: stringについては何も知らない。それでも使いたい場合はchar *を使用してください。
std::string
からC char*
文字列を取得するには、c_strメソッドを使用します。
std::ostringstream os;
os << "what is your " << name;
std::string new_string = os.str();
あなたはいつものように何かを行うことができます:stringstream
を使用し、また
char buffer[100];
string format = "what is your %s";
sprintf(buffer, format.c_str(), name.c_str());
string new_string(buffer);
を:
stringstream buf;
buf << "what is your " << name;
string new_string = buf.str();
私は私が問題を理解していませんここに - sprintf
は、を取り込む関数です第1引数として、第2引数としてconst char*
を含む。これらはどちらもCのデータ型であるため、C++文字列を使用することがコンパイラによって有効であると認識されるかどうかはわかりません。
また、この関数は文字列ではなくint(文字数)を返します。戻り値がnew_string
のように見えます。
詳細については、あなたは、CおよびC++の両方のソリューションのためのhttp://www.cplusplus.com/reference/clibrary/cstdio/sprintf/
+1で見ることができます。 – kist