gpt4 book ai didi

c - 将字符串从 C 传递到 Ada 的最佳方式

转载 作者:行者123 更新时间:2023-12-03 23:10:21 25 4
gpt4 key购买 nike

我有一个要求,我需要将字符串从 C 函数传递到 Ada 函数(C-Ada 绑定(bind)应用程序)。

C 函数:

extern void ada_func_print_string(char*);
void Pass_String()
{
char str[] = "Hello_Ada";
ada_func_print_string(str);
}

Ada函数:

规范:

pragma Export (Convention    => C,
Entity => Ada_Print_String,
External_Name => "ada_func_print_string");

正文:

procedure Ada_Print_String (C_Source : Interfaces.C.char_array)
Ada_Str : String := Interfaces.C.To_Ada(Item => C_Source,
Trim_Nul => True);
begin
Ada.Text_IO.Put_Line(Ada_Str);
end Ada_Print_String;

上面的代码几乎可以正常工作,没有任何麻烦。我的问题是形参C_Source 的声明是Interfaces.C.char_array 还是应该是Interfaces.C.Strings 更好。字符指针?两者在这个应用程序上有什么区别?在这里使用这两种类型是否有致命性?

最佳答案

Ada 95 Rationale, §B.2 C Interface Package, §B.2.2 Strings可能会对此提供一些看法。注意 Interfaces.Cpure提供基本类型和允许 Ada 子程序接受 C 字符串的子程序的包。相比之下,Interfaces.C.Strings通过私有(private)类型 chars_ptr 允许“Ada 程序分配、引用、更新和释放 C 风格的字符串”。在您的示例中,C 编译器 must将空终止符附加到您的字符串文字,但错误的 C 程序可能会造成恶作剧。

char str[] = {'H','e','l','l'};

验证您的代码是否处理了生成的Terminator_Error

关于c - 将字符串从 C 传递到 Ada 的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37203251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com