私は非ヌル終了文字列を返すレガシー関数をいくつか持っています。非ヌル終了C文字列を終了C文字列に変換する最もきれいな方法
struct legacy {
char a[4]; //not null terminated
char b[20]; //not null terminated
};
私はこれらの文字配列を周りにたくさん渡しています。それらをヌルに変換するにはクリーンな方法が必要です。
これは私がやっていたもので、今の時点で:
legacy foo;
std::string a(foo.a, sizeof(foo.a));
std::string b(foo.b, sizeof(foo.b));
bar(foo.a.c_str(), foo.b.c_str());
私は何かのようにこのコードを減らすためのクラスとテンプレートを使用することができますきれいな方法はあります...
legacy foo;
bar(make_null_terminated(foo.a), make_null_terminated(foo.b));
'バー()' 'だけのconstのchar *'を取るのか?それはそれらを保持しているのか、ntbsの寿命は 'bar()'の呼び出しを最後にする必要はありませんか? – Barry
@バリーバーは 'const char *'を取るだけです – andre
他のものを取るように変更することはできますか? – Barry