Ada的字符串不像C那样以null结尾。在一个C-Ada绑定应用程序中,我有一个需求,需要将在Ada代码中分配的字符串传递给C函数。那么C如何识别这里的Ada字符串,因为在C中,字符串通常是简单的char数组,以null字符结尾,而在Ada中并非如此?
如果有示例,将不胜感激!
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 String
时,To_C
默认将Append_Nul
设置为True
。因此,Ada Foo
使用正确的null
终止的C字符串调用C foo
。
strncpy(newstr, ada_str, length);
,并显式终止newstr
,例如newstr[length] = 0;
。或者,如果您在C代码中拥有ada字符串和长度,并且可以使用相同的变量,则只需终止ada_string,例如adastring[length] = 0;
(或者如果ada从1
而不是0
开始索引,则adastring[length+1] = 0;
(只要有存储空间添加nul-terminator) - David C. Rankin