将字符串从Ada函数传递给C函数

时间:2016-03-18 04:55:51

标签: c string ada

Ada的字符串不会像C一样终止。我在C-Ada绑定应用程序中有一个要求,我需要将在Ada代码中分配的字符串传递给C函数。如何在C中识别Ada字符串,因为C中的字符串通常是由null char终止的简单char数组,而在Ada中不是这样的情况?

任何例子都将不胜感激!

1 个答案:

答案 0 :(得分:1)

在此主题上将@ manuBriot的answer扩展到您之前的question,请注意,方便的包装器procedure Foo会在传入的Ada String上调用New_String获得chars_ptr

procedure Foo (C : String) is
   S : Interfaces.C.Strings.chars_ptr := New_String (C);
begin
   …
end Foo;

另请注意,New_String“相当于New_Char_Array(To_C(Str))。”默认情况下,当Ada StringTo_CAppend_Nul设置为True时。因此,Ada Foo使用正确foo终止的C字符串调用C null