まず、constreferenceまたはvalueが何も変更しないかどうか。
次に、関数が何を期待しているかを考慮する必要があります。関数がachar*
または--で実行できるさまざまなことがあります。たとえば、char const*
の元のバージョンではこれらの型が使用されていましたが、そのようなコードがまだ存在している可能性があります。うまくいけば、それはまれであり、以下では、C関数のが
終了した文字列を参照しmemcpy
ていると仮定します。char*
'\0'
C関数がをとる場合、あなたはそれに;char const*
の結果を渡すことができます。std::string::c_str()
かかる場合はchar*
、状況によって異なります。それがCの前日char*
からのものであるという理由だけでconst
、実際には何も変更しない場合は、
std::string::c_str()
その後にaを付けるのconst_cast
が適切です。ただし、 C関数がchar*
outパラメータとして使用している場合は、事態はさらに困難になります。私は個人的にバッファを宣言し、char[]
これを渡してから結果をに変換することを好みますstd::string
が、すべての既知の実装でstd::string
は連続したバッファを使用し、標準の次のバージョンではそれが必要になるため、std::string
最初のバッファを正しくディメンション化します(を使用して
std::string::resize()
から、を渡し&s[0]
、その後、文字列を結果の長さに再ディメンション化します(strlen(s.c_str())
、必要に応じて)も使用できます。
最後に(ただし、これはを使用するCプログラムの問題でもあり
char[]
ます)、生涯の問題を考慮する必要があります。ほとんどの関数はポインタを取得するchar*
かchar const*
単に使用し、それを忘れますが、関数がポインタをどこかに保存する場合、後で使用するために、文字列オブジェクトは少なくとも同じ長さで存続する必要があり、その期間中にそのサイズを変更しないでください。(繰り返しますが、そのような場合、私はを使用することを好みchar[]
ます。)