2011-12-14 22 views

答えて

4

使用format.c_str()

string format = "what is your %s"; 
int total = sprintf(buffer, format.c_str(), name); 

がまた返された値が新しい文字列ではないことに注意して、それが出力する文字列ですバッファです。返される値は、実際に書き込まれた文字の総数です。このカウントには、文字列の末尾に自動的に追加されるヌル文字は含まれません。失敗すると、負の数が返されます(see doc here)。

しかし、@Joachimが彼の答えで説明したように、C++では、std::ostringstreamがより良くタイプセーフです。

1

sprintfに渡されるフォーマットは、std::stringではなく、char*でなければなりません。 sprintfは、作成されたバッファへのポインタではなく、書き込まれた文字数も返します。

もう1つの可能性は、std::ostringstreamを使用してフォーマットを行うことです。

-1

stringstreamより多くのOOであるC++ STLを使用することができます。

documentationをご覧ください。

sprintfはCライブラリの一部であり、したがってstd :: stringについては何も知らない。それでも使いたい場合はchar *を使用してください。

std::stringからC char*文字列を取得するには、c_strメソッドを使用します。

3

使用ostringstream

std::ostringstream os; 
os << "what is your " << name; 
std::string new_string = os.str(); 
2

あなたはいつものように何かを行うことができます: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(); 
+0

+1で見ることができます。 – kist

0

私は私が問題を理解していませんここに - sprintfは、を取り込む関数です第1引数として、第2引数としてconst char*を含む。これらはどちらもCのデータ型であるため、C++文字列を使用することがコンパイラによって有効であると認識されるかどうかはわかりません。

また、この関数は文字列ではなくint(文字数)を返します。戻り値がnew_stringのように見えます。

詳細については、あなたは、CおよびC++の両方のソリューションのためのhttp://www.cplusplus.com/reference/clibrary/cstdio/sprintf/

関連する問題