将字符串从 Ada 函数传递到 C 函数
Passing Strings from Ada function to C function
Ada 的字符串不像 C 那样以 null 结尾。我在 C-Ada 绑定应用程序中有一个要求,我需要将在 Ada 代码中分配的字符串传递给 C 函数。 C 如何识别此处的 Ada 字符串,因为 C 中的字符串通常是以空字符结尾的简单字符数组,而 Ada 中不是这种情况?
如有任何示例,我们将不胜感激!
在传入的 Ada String
上扩展 @manuBriot 的 to your previous on this topic, note that the convenient wrapper procedure Foo
calls New_String
以获得 chars_ptr
。
procedure Foo (C : String) is
S : Interfaces.C.Strings.chars_ptr := New_String (C);
begin
…
end Foo;
另请注意,New_String
"is equivalent to New_Char_Array(To_C(Str))
." 当传递 Ada String
时,To_C
默认将 Append_Nul
设置为 True
。结果,Ada Foo
使用正确 null
终止的 C 字符串调用 C foo
。
Ada 的字符串不像 C 那样以 null 结尾。我在 C-Ada 绑定应用程序中有一个要求,我需要将在 Ada 代码中分配的字符串传递给 C 函数。 C 如何识别此处的 Ada 字符串,因为 C 中的字符串通常是以空字符结尾的简单字符数组,而 Ada 中不是这种情况?
如有任何示例,我们将不胜感激!
在传入的 Ada String
上扩展 @manuBriot 的 procedure Foo
calls New_String
以获得 chars_ptr
。
procedure Foo (C : String) is
S : Interfaces.C.Strings.chars_ptr := New_String (C);
begin
…
end Foo;
另请注意,New_String
"is equivalent to New_Char_Array(To_C(Str))
." 当传递 Ada String
时,To_C
默认将 Append_Nul
设置为 True
。结果,Ada Foo
使用正确 null
终止的 C 字符串调用 C foo
。