私は、 ( Ada で)Ada.Strings.Unbounded.Unbounded_String
を取る C 関数に渡したいを持っています。char *
Interfaces.C.chars_ptr
私の現在の実装では、無制限の文字列を固定文字列にコピーしてから、固定文字列をchars_ptr
.
F_String : String := To_String (UB_String);
C_String : chars_ptr := New_String (F_String);
これは 2 回コピーされることに注意してください。
Imported_Function (C_String);
Free (C_String);
そして捨てるF_String
。
最小限のコピーを使用して、目的の動作 (Unbounded String に保持されている文字列をインポートされた C 関数に渡す) を実現できますか? 理想的には、内部バッファーを関数に直接渡すのがクールです UB_String
が、これはおそらく移植性がありません。中間の固定文字列を必要とせずに、少なくとも同じ動作を実現できますか?
Ada.Strings.Unbounded.Aux
GNAT には、Unbounded String の内部バッファーへのアクセスを可能にする内部パッケージがあることがわかりましたが、これは移植性がなく、GNAT のバージョン間で壊れる可能性があります。