でのconstのchar *を取得するI私はconst char *
に変換するが必要数(私はそれらを使用しているAPIは、その機能の多くに入力としてconst char *
必要です)持っています。次の作品は:変換は::はstd文字列と1行
int num = 5;
std::string s = std::to_string(5);
const char * p = s.c_str();
how to convert from int to char*?のもののような答えによって示唆されているように、それは一見不必要な変数s
を作成する必要が、私は、次の試してみましたが、それはその後、空の文字列に(Pポイントを動作しません。 ):
int num = 5;
const char * p = std::to_string(num).c_str();
これを達成するためのクリーンな方法はありますか?なぜ2番目の例は機能しませんか?
const char * p;
{
std::string tempStr("hi");
p = tempStr.c_str();
// p points to "hi" string.
}
// now p points to "" string.
私は問題std::to_string(num)
がすぐスコープまたは直接何かを初期化するために使用されていないので、似たようなの外に出ることを疑うます:私はこの明白なミスを犯した場合の動作は何が起こるかと非常によく似ています。
理由だけではなく、 'のstd :: STRING'を使用し、'のconstのchar * 'を忘れませんか? ( 'std :: string'は有用なコードでラップされた' char * 'だけなので、必要ありません) – Galik
' '一見不要な' 'インスタンスは、' p'が指し示す動的に割り当てられたメモリを管理します。 2番目の例では、そのメモリはすぐに割り当てが解除され、 'p'にはダングリングポインタが残っています。 3番目の例と同じですが、明示的にもう少し詳しく説明します。 –
@Galikええ、私は大好きですが、私が使用しているAPIは、私がたくさん使う関数の入力としてconst char *を必要としています。 – aquirdturtle